我使用android支持库,我有3个片段的活动。 ,我有一个问题:替换片段的删除其他片段Android:替换片段删除其他片段
我的活动:
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Add 3 fragments:
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container1, new A(), A.class.getCanonicalName())
.commit();
getFragmentManager().beginTransaction()
.add(R.id.container2, new B(), B.class.getCanonicalName())
.commit();
getFragmentManager().beginTransaction()
.add(R.id.container3, new C(), C.class.getCanonicalName())
.commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.test) {
Fragment fragment = getFragmentManager().
findFragmentByTag(A.class.getCanonicalName());
if (fragment == null)
fragment = new A();
// Replace fragment A again
getFragmentManager()
.beginTransaction()
.replace(R.id.container1, fragment, fragment.getClass().getCanonicalName())
.commit();
// After this fragment B disappears
return true;
}
return super.onOptionsItemSelected(item);
}
}
我使用findFragmentByTag避免内存泄漏。 你能帮我吗?
尝试增加这片段的交易,之前提交 '//添加本次交易后堆 .addToBackStack()' –
不知道你的问题是清楚的,因为你做.replace这样按预期的方式取代了以往的片段。现在@IonutNegru说,如果问题是你不能倒退,那么使用addToBackStack,但问题并不清楚。 – HpTerm
@HpTerm也是对的,你应该使用add来避免替换当前片段。我错过了那一个。 您可以查看碎片的官方文档。你的情况也有一些例子。 –