首页 > 解决方案 > 如何使用上一个和下一个按钮切换片段?

问题描述

我有 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) {

}

标签: androidandroid-fragments

解决方案


您的实例检查方法在错误的地方。当您在 onCreate 中调用 setFragment 时,需要一些时间来替换 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

    }
            }
        });

我不擅长格式化。希望这是有道理的。


推荐阅读