在同一容器中切换片段

时间:2014-08-12 08:52:55

标签: android android-activity android-fragments

我的活动中有两个按钮。当我点击button1时,我显示一个片段,当我点击button2时,我在同一个容器中显示另一个片段。对于每个片段,我正在设置一个标签,这样如果再次单击该按钮,我将只替换容器中的片段。问题是当我再次点击第二个按钮时,findFragmentByTag返回'null'并再次加载片段。 这是我正在使用的代码

    Button button1= (Button) findViewById(R.id.button1);
    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            MyFragment myFragment = (MyFragment) fragmentManager.findFragmentByTag("button1");
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            if(myFragment==null){
                MyFragment fragment = new MyFragment();
                fragmentTransaction.add(R.id.container, fragment, "button1");                   
                fragmentTransaction.commit();
            }else{                  
                fragmentTransaction.replace(R.id.container, myFragment, "button1");                 
                fragmentTransaction.commit();
            }

        }
    });
    Button button2= (Button) findViewById(R.id.button2);
    button2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            MyFragment myFragment = (MyFragment) fragmentManager.findFragmentByTag("button2");// always return null
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            if(myFragment==null){
                MyFragment fragment = new MyFragment();
                fragmentTransaction.add(R.id.container, fragment, "button2");                   
                fragmentTransaction.commit();
            }else{
                fragmentTransaction.replace(R.id.container, myFragment, "button2");                 
                fragmentTransaction.commit();
            }
        }
    });

在上面的代码中, fragmentManager.findFragmentByTag(“button2”)始终返回null。 任何人都可以让我知道如何让这个工作。我见过其他线程,但找不到任何解决方案。

TIA, VijayRaj

1 个答案:

答案 0 :(得分:0)

您必须在调用新事务之前执行挂起的事务。试试这个:

getSupportFragmentManager().executePendingTransactions()

修改

使用FragmentTransaction替换Fragment后,您必须将其添加到Backstack。

fragmentTransaction.addToBackStack(button1);