Как переключать фрагменты, используя предыдущую и следующую кнопки?

1

У меня есть 3 класса фрагментов. Когда я нахожусь в 1-м классе фрагментов, имеющем две кнопки, то есть "следующая" и "предыдущая", кнопка "предыдущая" должна оставаться неактивной, а затем при нажатии кнопки "далее" класс фрагмента должен переключиться на 2-й класс фрагмента и аналогично нажатию " Кнопка "Далее" должна переключиться на 3-й класс фрагмента, но оставшаяся кнопка "Следующая" будет недоступна для нажатия.

Моя проблема в том, что ни одна из кнопок не работает при нажатии. Когда я на первой странице, ни кнопка "Следующая" не переключается на второй класс фрагмента, ни кнопка "Предыдущая" не остаются недоступными для нажатия.

Прямо сейчас, чтобы проверить, я изменяю цвет текста кнопок на белый, чтобы было ощущение, что кнопка не нажата.

 public class HomeFormViewActivity extends AppCompatActivity implements 
 FirstPage.OnFragmentInteractionListener, 
 SecondPage.OnFragmentInteractionListener, 
 ThirdPage.OnFragmentInteractionListener {

Button button1, button2;
public FrameLayout frameLayout;

public FirstPage firstPage;
public SecondPage secondPage;
public ThirdPage thirdPage;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_form_view);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    button1 = findViewById(R.id.pre_button);
    button2 = findViewById(R.id.nxt_button);

    frameLayout = findViewById(R.id.frame_layout);

    firstPage = new FirstPage();
    secondPage = new SecondPage();
    thirdPage = new ThirdPage();

    setFragment(firstPage); // To display first fragment

    if (currentFragment() instanceof FirstPage){

        Toast.makeText(this, "You are in first page", Toast.LENGTH_SHORT).show();
        button1.setTextColor(getResources().getColor(R.color.LightGrey));
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                setFragment(secondPage);
            }
        });
    }


     if (currentFragment() instanceof SecondPage){

        Toast.makeText(this, "You are in second page", Toast.LENGTH_SHORT).show();
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                setFragment(thirdPage);
            }
        });
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                setFragment(firstPage);
            }
        });
    }

  if (currentFragment() instanceof ThirdPage){

        Toast.makeText(this, "You are in third page", Toast.LENGTH_SHORT).show();
        button2.setTextColor(getResources().getColor(R.color.LightGrey));
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                setFragment(secondPage);
            }
        });
    }

}

public Fragment currentFragment() {

    return getSupportFragmentManager().findFragmentById(R.id.frame_layout);
}

private void setFragment(Fragment fragment) {

    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.frame_layout, fragment);
    fragmentTransaction.commit();
}

@Override
public void onFragmentInteraction(Uri uri) {

}
Теги:
android-fragments

1 ответ

2

Ваши методы проверки экземпляров находятся в неправильном месте. Когда вы вызываете setFragment в onCreate, требуется некоторое время, чтобы заменить фрагменты в framelayout. Во-вторых, ваши условия проверки не будут выполняться каждый раз, когда вы заменяете фрагмент. Кроме того, вы должны добавить фрагмент в первый раз, а затем вызвать заменить.

Нажатие кнопки должно быть примерно таким:

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (currentFragment() instanceof FirstPage){
//Some code here
                   }else if (currentFragment() instanceof SecondPage){
//Some code here
    }
            }
        });
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (currentFragment() instanceof FirstPage){
//Some code here
                   }else if (currentFragment() instanceof SecondPage){
//Some code here

    }
            }
        });

Я не очень хорош в форматировании. Надеюсь, это имеет смысл.

  • 0
    Большое спасибо @Rushi M Thakker. Я понимаю, в чем я совершаю ошибку.
  • 0
    Большой!! Удачи и счастливого кодирования
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню