Skip to content

Commit

Permalink
Allow user to disable slide & angular fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
triniwiz committed Oct 26, 2016
1 parent 2738c89 commit 246959c
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 18 deletions.
17 changes: 14 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ import {registerElement} from "nativescript-angular/element-registry";
registerElement("Pager", () => require("nativescript-pager").Pager);
```

```xml
<Pager>
```html
<Pager #pager>

<StackLayout>
<Label text="Slide 1"></Label>
Expand All @@ -60,10 +60,21 @@ registerElement("Pager", () => require("nativescript-pager").Pager);
</Pager>
```

*Note*
Using it with angular is a bit tricky.
If you intend to use with `*ngFor`
You will ned to do some extra work. (This should be fixed in future :p)

```
ngAfterViewInit(){
this.pager.nativeElement.runUpdate();
}
```

##Config

```xml
<Pager selectedIndex="5" transformer="FlipHorizontalTransformer">
<Pager disableSwipe="true" selectedIndex="5" transformer="FlipHorizontalTransformer">
```


Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "nativescript-pager",
"version": "1.0.1",
"version": "1.1.0",
"description": "",
"main": "pager.js",
"nativescript": {
Expand Down
3 changes: 3 additions & 0 deletions pager.android.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ export declare class Pager extends StackLayout {
private _pagerAdapter;
private _transformer;
private _android;
private _disableSwipe;
static selectedIndexProperty: Property;
constructor();
disableSwipe: boolean;
readonly android: android.support.v4.view.ViewPager;
readonly _nativeView: android.support.v4.view.ViewPager;
readonly pagerAdapter: android.support.v4.view.PagerAdapter;
Expand All @@ -15,4 +17,5 @@ export declare class Pager extends StackLayout {
_createUI(): void;
onLoaded(): void;
updateIndex(index: number): void;
runUpdate(): void;
}
70 changes: 56 additions & 14 deletions pager.android.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { StackLayout } from "ui/layouts/stack-layout";
import { PropertyMetadataSettings, Property, PropertyChangeData } from "ui/core/dependency-observable";
import { PropertyMetadata } from "ui/core/proxy";
import { View } from "ui/core/view";
declare var com;
function onSelectedIndexChanged(data: PropertyChangeData) {
const item = <Pager>data.object;
Expand All @@ -11,10 +12,17 @@ export class Pager extends StackLayout {
private _pagerAdapter: android.support.v4.view.PagerAdapter;
private _transformer;
private _android: android.support.v4.view.ViewPager;
private _disableSwipe: boolean;
public static selectedIndexProperty = new Property("selectedIndex", "Pager", new PropertyMetadata(undefined, PropertyMetadataSettings.None));
constructor() {
super();
}
get disableSwipe(): boolean {
return this._disableSwipe;
}
set disableSwipe(value: boolean) {
this._disableSwipe = value;
}
get android() {
return this._android;
}
Expand Down Expand Up @@ -92,16 +100,20 @@ export class Pager extends StackLayout {
if (!this._androidViewId) {
this._androidViewId = android.view.View.generateViewId();
};
this._android = new android.support.v4.view.ViewPager(this._context);
if (this.disableSwipe) {
this._android = new TNSViewPager(this._context, true); //new android.support.v4.view.ViewPager(this._context);
} else {
this._android = new TNSViewPager(this._context); //new android.support.v4.view.ViewPager(this._context);
}

this._android.setId(this._androidViewId);
}

onLoaded() {
super.onLoaded();
const that = new WeakRef(this);
this._android.setOffscreenPageLimit(this._android.getChildCount());
this._pagerAdapter = new PagerAdapter(this);
this._android.setOnPageChangeListener(new android.support.v4.view.ViewPager.OnPageChangeListener({
this._android.addOnPageChangeListener(new android.support.v4.view.ViewPager.OnPageChangeListener({
onPageSelected: function (position: number) {
that.get().selectedIndex = position;
},
Expand All @@ -118,12 +130,22 @@ export class Pager extends StackLayout {
this._android.setCurrentItem(this.selectedIndex);
}
}

updateIndex(index: number) {
if (this._android && index) {
this._android.setCurrentItem(index);
}
}
runUpdate() {
if (this._android.getChildAt(0) instanceof org.nativescript.widgets.ContentLayout) {
this._android.removeViewAt(0);
}
this._pagerAdapter.notifyDataSetChanged();
if (this._pagerAdapter.getCount() > 0) {
this._android.setOffscreenPageLimit(this._pagerAdapter.getCount());
}

}

}
Pager.selectedIndexProperty.onValueChanged = onSelectedIndexChanged;
class PagerAdapter extends android.support.v4.view.PagerAdapter {
Expand All @@ -135,23 +157,43 @@ class PagerAdapter extends android.support.v4.view.PagerAdapter {
}

instantiateItem(collection: android.view.ViewGroup, position: number) {
if (position <= this.owner.android.getChildCount() - 1) {
const view = this.owner.android.getChildAt(position);
collection.removeView(this.owner.android.getChildAt(position));
collection.addView(view, position);
this.owner.pagerAdapter.notifyDataSetChanged();
return view;
}

return this.owner.android.getChildAt(position);
}

destroyItem(container: android.view.ViewGroup, position: number, object) {
container.removeView(object);
}
getCount(): number {
return this.owner.android.getChildCount();

return this.owner.android ? this.owner.android.getChildCount() : 0;
}
isViewFromObject(view: android.view.View, object) {
return view == object;
return view === object;
}
}

class TNSViewPager extends android.support.v4.view.ViewPager {
disableSwipe: boolean;
constructor(context, disableSwipe?: boolean) {
super(context);
if (disableSwipe) {
this.disableSwipe = disableSwipe;
}
return global.__native(this);
}
onInterceptTouchEvent(ev) {
if (this.disableSwipe) {
return false;
} else {
return super.onInterceptTouchEvent(ev);
}
}
onTouchEvent(ev) {
if (this.disableSwipe) {
return false;
}
else {
return super.onTouchEvent(ev);
}
}
}

0 comments on commit 246959c

Please sign in to comment.