У меня есть 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) {
}
Ваши методы проверки экземпляров находятся в неправильном месте. Когда вы вызываете 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
}
}
});
Я не очень хорош в форматировании. Надеюсь, это имеет смысл.