Android 在同一容器中的片段之间切换
我的活动中有两个按钮。当我单击按钮1时,我显示一个片段,当我单击按钮2时,我显示同一容器中的另一个片段。对于每个片段,我设置了一个标记,这样,如果再次单击按钮,我将只替换容器中的片段。问题是,当我再次单击第二个按钮时,findFragmentByTag返回“null”,片段再次加载。 这是我正在使用的代码Android 在同一容器中的片段之间切换,android,android-activity,android-fragments,Android,Android Activity,Android Fragments,我的活动中有两个按钮。当我单击按钮1时,我显示一个片段,当我单击按钮2时,我显示同一容器中的另一个片段。对于每个片段,我设置了一个标记,这样,如果再次单击按钮,我将只替换容器中的片段。问题是,当我再次单击第二个按钮时,findFragmentByTag返回“null”,片段再次加载。 这是我正在使用的代码 Button button1= (Button) findViewById(R.id.button1); button1.setOnClickListener(new OnCl
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。
有人能告诉我如何让它工作吗。我见过其他线程,但找不到任何解决方案
蒂亚,
VijayRaj在调用新事务之前,必须执行挂起的事务。试试这个:
getSupportFragmentManager().executePendingTransactions()
编辑
用FragmentTransaction替换片段后,必须将其添加到backbackback中。
fragmentTransaction.addToBackStack(button1);
我在调用fragmentManager.beginTransaction()之前添加了这个,但它仍然不起作用啊,我现在看到了,在替换之后,您不会发送事务addToBackStack(button1)。干杯我应该在哪里将其添加到后台??在我的onclicklistener中,按钮1或按钮2??用于每个。我已经更新了我的awnser,对它进行了一般性的解释,如果你替换一个片段,你必须将它添加到backstack,这意味着对于每次事务替换,你必须将替换的片段添加到backstack。addtoBackStack不是我想要的…我正在使用fragmentTransaction的隐藏和显示方法在两个片段之间切换