изменить положение адаптера FragmentPagerAdapter при нажатии кнопки фрагмента

Я работаю над приложением для Android. В моем приложении я должен использовать 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) {

}

}

и один из моих фрагментов следующий. фрагмент_один.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);
   }
}

Пожалуйста, помогите решить мою проблему.


person sarath    schedule 15.01.2014    source источник
comment
Мне помог ответ codedroid в этом сообщении: stackoverflow.com/questions/16644853/   -  person owe    schedule 15.01.2014


Ответы (2)


Я бы вставил эту следующую кнопку в действие фрагмента вместо того, чтобы вставлять одну и ту же кнопку внутри каждого фрагмента. Но, конечно, это зависит от вашего дизайна. Если вы хотите иметь только одну кнопку «Далее», вы можете использовать панель Шерлока и держать свои кнопки там, на экране.

Если ваш дизайн требует наличия кнопок внутри фрагментов, я бы использовал интерфейсы. Вы можете прослушивать события кликов фрагментов из активности вашего фрагмента. И установите Текущий элемент адаптеров пейджера фрагментов в соответствии с положением фрагментов.

Но в любом случае, проверьте этот учебник. Я верю, что это поможет.

Учебное пособие по фрагментам Vogella

person osayilgan    schedule 15.01.2014

На самом деле это довольно просто.

Каждый фрагмент позволяет вам получить экземпляр вашей родительской активности. Как только вы это сделаете, вы можете предположить, что там создан экземпляр 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
    }
}
person Advait S    schedule 11.05.2018