2013-03-19 84 views
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(); 
} 

然后我甲肝e带有产品清单的名为ResultsList的活动,点击后我开始新的意向再次呼叫ProductDisplayActivity,当然不同的值。

问题:

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

回答

0

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

基本上我救字符串“SavedString”进入活动太多,所以当活动被恢复了我所说的片段功能设置文本:

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

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

你确定你不是在搞这个术语吗?这听起来很像。
编辑:好吧,你没有。通过在活动中嵌入Fragments,您可以将自己置于处理生命周期两倍的位置。

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

'但表示用通过开展活动片段新意图不是我想象的最好主意。“你能解释一下为什么吗?此外,该列表不是一个片段,而是一个活动,正如我在我的问题中所写的,我从“产品活动”导航到“列表活动”,然后再次导航到“产品活动”。 – 2013-03-19 12:10:33

+0

只需很少的工作,您就可以通过在布局中封装碎片来适应多个屏幕。你不能真正把两个不同的活动放在一起。 FragmentManager类使它更容易。通过将一个片段放入不同的活动中,您正在限制自己,因为片段被设计为模块化并具有自己的生命周期。 – 2013-03-20 13:02:08