0

我有一个活动ProductDisplayActivity,里面有一个片段。这个片段是在onCreate我的活动方法中创建的,如下所示:

ProductInfoFrag = new ProductInfoFragment();
ProductInfoFragmentListener = (ProductRetrieveInfoInterface) ProductInfoFrag;
FragmentTransaction InitialTransaction = fm.beginTransaction();
InitialTransaction.add(R.id.product_info_frame, ProductInfoFrag);
InitialTransaction.commit();

在片段中,通过一个接口,我调用了这个函数:

@Override
public void DownloadProductInfo(String ProductInfoDescription) {
    ProductInfo.setText(Html.fromHtml(ProductInfoDescription));
    SavedString = new Bundle();
    SavedString.putString("SavedString", ProductInfoDescription);
}

我想保存,ProductInfoDescription以便在替换 frament 时可以从中重新创建视图Bundle,所以onResume我有:

@Override
public void onResume() {
    if(SavedString != null){
      ProductInfo.setText(Html.fromHtml(SavedString.getString("SavedString")));
    }
    super.onResume();
}

然后我有一个ResultsList使用产品列表调用的活动,单击时我再次ProductDisplayActivity使用不同的值开始新的意图调用。

问题:

我的问题是,如果我从导航product 1product list然后到product 2然后尝试按 后导航,back buttonBundleofproduct 1具有ProductInfoDescription. product 2我不知道如何解决这个问题,当调用一个新的ProductDisplayActivity然后new ProductInfoFragment不应该每个片段都有自己Bundle的价值,因为不同的片段?

4

2 回答 2

0

然后我有一个名为 ResultsList 的活动,其中包含产品列表,单击时我开始一个新的意图,再次调用 ProductDisplayActivity,当然有不同的值。

你确定你没有在这里搞乱术语吗?听起来确实如此。
编辑:嗯,你没有。通过在 Activity 中嵌入 Fragments,您可以将自己置于处理双倍生命周期的位置。

  1. 确保您有一个活动,两个片段(列表和信息)通过该活动相互通信。这些片段应该具有由活动实现的接口。
  2. 将 Bundle 对象作为参数传递给每个片段。在构建片段时填写信息。
  3. 除非您想显示多个信息,否则最好使用 FragmentManager.replace()。
于 2013-03-19T12:01:43.250 回答
0

我以非最佳方式解决了这个问题,所以如果有人提出更好的答案,我会很乐意检查。

基本上我也将字符串“SavedString”保存到活动中,所以当活动恢复时,我调用片段函数来设置文本:

ProductInfoFragmentListener.DownloadProductInfo(Html.fromHtml(SavedString.getString("SavedString"))); 
于 2013-03-19T14:49:23.140 回答