在片段按钮点击时更改FragmentPagerAdapter适配器位置

4

我正在开发一个安卓应用。在我的应用中,我需要使用5个片段,并从第1个片段向第5个片段滑动。因此,我使用了一个FragmentActivity、FragmentPagerAdapter和5个片段。 现在,我可以通过所有的片段并且可以使用以下方法标识当前的片段:

ViewPager.OnPageChangeListener()

我需要在所有片段中添加按钮并且当按钮被点击时必须像滑动一样打开下一个片段。我该如何实现这个功能?以下是我发布的一些代码片段。

fragmentactivity.java

public class HomeScreen extends FragmentActivity 
{
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.themed_circles);

    mAdapter = new InsuranceFragmentAdapter(getSupportFragmentManager(),
            HomeScreen.this);
    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);
    mIndicator = (CirclePageIndicator) findViewById(R.id.indicator);
    mIndicator.setViewPager(mPager);
    // mIndicator.setCurrentItem(2);

    mIndicator
            .setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                private int pos;

                @Override
                public void onPageSelected(int position) {

                }

                @Override
                public void onPageScrolled(int position,
                        float positionOffset, int positionOffsetPixels) {


                }

                @Override
                public void onPageScrollStateChanged(int state) {
                    System.out.println("test scroll state" + state);

                }
            });
}

  }

以下是用于滑动片段的FragmentPagerAdapter。
FragmentPagerAdapter.java


public class InsuranceFragmentAdapter extends FragmentPagerAdapter {
Context contx;


public InsuranceFragmentAdapter(FragmentManager fm, Context ctx) {

    super(fm);
    this.contx = ctx;


}

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;
    switch (position) {
    case 0:
        fragment = Fragment.instantiate(contx, com.lic.fragments.FragmentBasicPersonal.class.getName());
        break;

    case 1:
        fragment = Fragment.instantiate(contx, com.lic.fragments.FragmentationNomineeDetails.class.getName());
        break;

    }

    return fragment;
}

@Override
public int getCount() {

    return 2;
}



public void setCount(int count) {

}

而我的一个片段如下。 fragment_one.java

public class FragmentFemale extends Fragment {

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

   }

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View layout = inflater.inflate(R.layout.fragment_female_husband, container, false);
            next= (Button) layout.findViewById(R.id.save);
            next.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
                   //need to change to next fragment
          }
            }
       return layout;
   }

   @Override
   public void onSaveInstanceState(Bundle outState) {
       super.onSaveInstanceState(outState);
     //  outState.putString(KEY_CONTENT, mContent);
   }
}

请帮忙解决我的问题。


编码机器人在这篇文章中的回答帮了我:https://dev59.com/9mQn5IYBdhLWcg3wr4w6 - owe
2个回答

5

嗯,这其实很简单明了

每个 Fragment 都可以让你获得它所在的 Activity 实例。一旦你拿到了 Activity 实例,就可以假定 ViewPager 在其中已经被实例化了。只需获取该实例并增加 ViewPager 的位置即可:

next.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

        // Change to next fragment onClick

        ViewPager vp = (ViewPager) getActivity().findViewById(R.id.pager); // Fetch ViewPager instance
        vp.setCurrentItem(vp.getCurrentItem()+1); // Increment ViewPager's position
    }
}

1
我建议将下一个按钮插入片段活动中,而不是在每个片段中都插入相同的按钮。但当然这取决于你的设计。如果您只想要一个下一个按钮,您可以使用sherlock栏并将按钮保留在屏幕上方。
如果您的设计需要在片段内部放置按钮,则我建议使用接口。您可以从片段活动中监听片段的点击事件。并根据片段位置设置您的片段页适配器的当前项目。
但无论如何,请查看此教程。我相信它会有所帮助。 Vogella片段教程

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接