我的活动中有两个按钮。当我点击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
答案 0 :(得分:0)
您必须在调用新事务之前执行挂起的事务。试试这个:
getSupportFragmentManager().executePendingTransactions()
修改强>
使用FragmentTransaction替换Fragment后,您必须将其添加到Backstack。
fragmentTransaction.addToBackStack(button1);