我使用一项活动来处理多项细节。
ActivityA
有一个产品列表,当您点击此列表中的任何项目时,请致电ActivityB
传递产品ID:
ActivityA
:
Intent i = new Intent(this, ProductDetail.class);
i.putExtra("pID", product.getId());
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(i);
在onCreate
和onNewIntent
方法中,我以这种方式处理它:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Bundle bundle = new Bundle(); //bundle to send data to the fragment
bundle.putInt("pID", intent.getExtras().getInt("pID"));
ProductDetail details = new ProductDetail();
details.setArguments(bundle);
loadFragment(details);
}
如果找到具有相同pID标记的片段,则必须添加或返回到特定片段的loadFragment
:
public void loadFragment(ProductDetail fragment) {
fm = getFragmentManager();
Log.d("TagFrag", "TAG: "+ pID); //can get pID from global variable or extra from fragment
if(fm.findFragmentByTag(pID+"") !=null) {
Log.d("TagFrag", "Already Added");
fm.popBackStack(pID+ "", 0);
} else {
Log.d("TagFrag", "New Added");
ft = fm.beginTransaction();
ft.add(R.id.fragments, fragment, pID+ "");
ft.commit();
fm.executePendingTransactions();
}
它显示的是"New Added"
还是"Already Added"
,但fm.popBackStack(pID+ "", 0);
仅显示最后添加的片段。
例如:
点击第1项 - > addFragment - >显示项目1详细信息
点击第2项 - > addFragment - >显示项目2详细信息
如果我返回Item列表并再次单击Item1,则行为为:
点击项目 1 - > fragmentAlreadyAdded - >显示项目 2 详细信息 为什么不再显示第1项?
答案 0 :(得分:0)
你真的在backstack上添加了什么吗?检查fm.getBackStackEntryCount()
。如果为0,则需要添加交易:ft.addToBackStack(tag)