Как переключать фрагменты с помощью кнопок «предыдущий» и «следующий»? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть 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) {

}

1 Ответ

0 голосов
/ 18 февраля 2019

Ваши методы проверки экземпляров находятся не в том месте.Когда вы вызываете 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

    }
            }
        });

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...