我有两个关于ViewPager的问题。
我的活动中有2个ViewPagers,每周一个(日期)。例如,一个用于14/9/14 - 20/9/14,另一个用于下一周21/9/14 - 27/9/14。当我将ViewPager滑动到它的下一个时,它会将ViewPagers的每个更改为下一周(21/9/14 - 27/9 / 14,28 / 9/14 - 4/10 / 14)。
当我更改第二个ViewPager的数据,然后将第一个ViewPager滑动到它的下一个(这是我改变的第二个视图寻呼机数据的同一周),它赢了&# 39; t显示我所做的更改,除非我再滑两次然后返回到更改的一周(因为ViewPager的内存)。我试过mPager1.setOffscreenPageLimit(0);
,但它没有帮助。我该怎么做才能解决这个问题?
当我滑动我的一个ViewPagers时,我想要那个,所以另一个将动画本身就像我的手指滑动另一个ViewPager一样。有什么想法怎么做?
答案 0 :(得分:3)
我希望它有所帮助:
它不会显示我所做的更改
在您进行更改后使用adapter.notifyDataSetChanged();
。
当我滑动我的一个ViewPagers时,我想要那个,所以另一个会 动画本身就像我的手指滑动其他ViewPager一样。 任何想法如何做到这一点?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager1= (ViewPager) findViewById(R.id.pager1);
viewPager2= (ViewPager) findViewById(R.id.pager2);
viewPager1.setAdapter(new MyAdapter1(getSupportFragmentManager()));
viewPager2.setAdapter(new MyAdapter2(getSupportFragmentManager()));
viewPager1.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
viewPager2.onTouchEvent(event);
return false;
}
});
viewPager2.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
viewPager1.onTouchEvent(event);
return false;
}
});
}
如果你有
09-19 05:49:29.313: E/AndroidRuntime(1272): java.lang.IllegalArgumentException: pointerIndex out of range
尝试:
在您的布局文件中,您必须使用<package name of HackyViewPager.HackyViewPager
而不是<android.support.v4.view.ViewPager
public class HackyViewPager extends ViewPager {
public HackyViewPager(Context context) {
super(context);
}
public HackyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException e) {
e.printStackTrace();
return false;
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
try {
return super.onTouchEvent(event);
}catch (IllegalArgumentException e) {
e.printStackTrace();
return false;
}
}
}
参考: