如何在viewpager的下一个片段上执行事件?

时间:2016-07-22 12:47:22

标签: android android-fragments android-viewpager

假设我在viewpager中有5个片段。让我们说片段A,B,C,D,E。

我在片段A上有一个按钮转到片段B.当我按下这个按钮时,viewpager滚动到片段B.不知怎的,我将片段A的持续时间控制为B.现在的事情是,我有一个可滚动的容器片段B.我想在A到B之间的滚动期间滚动该容器。现在我在从片段A到B之后进行滚动。我希望在此过渡之间发生这种情况。

在第一个片段中:

 @Override
public void onClick(View view) {
    if(view.getId() == bottomLayout.getId())
    {

        MainActivity.pager.setCurrentItem(1);

    }
}

它会将我的寻呼机位置0改为1.现在它的改变。我控制了viewpager的滚动速度。在第二个片段的顶部,我有一个ScrollView,我需要在片段改变时对此scrollview执行滚动,而不是在更改后。

2 个答案:

答案 0 :(得分:0)

要为FragmentB的视图设置动画,您需要在调用viewPager.setCurrentItem()后立即告诉它开始动画。

  1. 在FragmentA的点击监听器中,您将要求父Activity更改ViewPager项(请参阅Communicating with the Activity以了解应如何完成此操作):

    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            activityCallback.setViewPagerItem(POSITION_OF_FRAGMENT_B);
        }
    });
    
  2. ViewPager所在的活动中,您将写下:

    public void setViewPagerItem(int position) {
        viewPager.setCurrentItem(position);
        // following asks the fragmentB to start its animation on its view.
        if (position == POSITION_OF_FRAGMENT_B) {
            fragmentB.startYourAnimation();
        }
    }
    
  3. 在FragmentB中,您添加了一个方法:

    public void startYourAnimation() {
        // write your code to animate your ListView or whatever you want to
        // animate inside the FragmentB
    }
    
  4. 备注:

    1. 除非您已拨打viewPager.setOffscreenPageLimit(),否则如果您从FragmentAFragmentC执行此操作,则已存在FragmentB的实例,
    2. 一个片段不应该直接与其他片段通信,而应该使用他们的父Activity作为中间人。见Communicating with Other Fragments

答案 1 :(得分:-1)

不可能这样做,因为任何可滚动的视图,如listview或recyclerview,只有在用户可见且仅在滚动时才创建项目,因此如果该片段不可见,则无法滚动任何儿童可滚动视图。