更改 FragmentPagerAdapter 适配器在片段按钮单击上的位置

sar*_*ath 4 android android-fragments fragmentpageradapter

我正在开发 Android 应用程序。在我的应用程序中,我必须使用 5 个片段并从片段 1 滑动到片段 5。所以我使用了一个 FragmentActivity 、FragmentPagerAdapter 和 5 个片段。现在我可以滑动浏览所有片段,并可以通过使用来识别当前片段

ViewPager.OnPageChangeListener()
Run Code Online (Sandbox Code Playgroud)

我必须在所有片段中添加按钮,并且单击按钮必须像滑动一样打开下一个片段。我怎么能这样做呢?在这里我发布一些我的代码片段。

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

                }
            });
}

  }
Run Code Online (Sandbox Code Playgroud)

以下是我用于滑动片段的 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) {

}
Run Code Online (Sandbox Code Playgroud)

}

我的片段之一如下。片段_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);
   }
}
Run Code Online (Sandbox Code Playgroud)

请帮助解决我的问题。

Adv*_*t S 5

嗯,这确实非常简单

每个片段都允许您获取父活动的实例。一旦你知道了,你就可以假设它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
    }
}
Run Code Online (Sandbox Code Playgroud)