一个活动中有两个ViewPagers

时间:2014-09-18 12:15:23

标签: java android android-fragments android-viewpager

我有两个关于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)。

  1. 当我更改第二个ViewPager的数据,然后将第一个ViewPager滑动到它的下一个(这是我改变的第二个视图寻呼机数据的同一周),它赢了&# 39; t显示我所做的更改,除非我再滑两次然后返回到更改的一周(因为ViewPager的内存)。我试过mPager1.setOffscreenPageLimit(0);,但它没有帮助。我该怎么做才能解决这个问题?

  2. 当我滑动我的一个ViewPagers时,我想要那个,所以另一个将动画本身就像我的手指滑动另一个ViewPager一样。有什么想法怎么做?

1 个答案:

答案 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;
        }
    });

    }

enter image description here

如果你有

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;
     }

   }

}

参考:

Controlling two ViewPager Together