捆绑价值覆盖

时间:2013-03-19 11:24:04

标签: android android-fragments android-activity bundle

我有一个名为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,以便在更换相片时我可以从Bundle重新创建视图,因此在onResume我有:

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

然后我有一个名为ResultsList的活动,其中包含产品列表,点击后,我开始重新调用ProductDisplayActivity,当然还有不同的值。

问题:

我的问题是,如果我从product 1导航到product list然后导航到product 2,然后尝试按导航按back button,{{1 } Bundle的{​​{1}} product 1。 我不知道如何解决这个问题,在调用新的ProductInfoDescription然后product 2不应该每个片段都有自己的ProductDisplayActivity具有自己的值,因为它们是不同的片段吗? / p>

2 个答案:

答案 0 :(得分:0)

  

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

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

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

答案 1 :(得分:0)

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

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

ProductInfoFragmentListener.DownloadProductInfo(Html.fromHtml(SavedString.getString("SavedString")));