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);
}

ProductInfoDescriptionframentを交換するときに、これからビューを再作成できるように保存したいので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、のはBundleのをproduct 1持っているというProductInfoDescriptionことproduct 2です。ProductDisplayActivitynewを呼び出すときに、この問題を解決する方法がわかりnew ProductInfoFragmentません。フラグメントが異なるため、すべてのフラグメントがBundle独自の値を持つべきではありませんか?

4

2 に答える 2

0

次に、製品のリストを含むResultsListというアクティビティがあり、クリックすると、もちろん異なる値を使用してProductDisplayActivityを再度呼び出す新しいインテントを開始します。

ここで用語を台無しにしていないのですか?それは確かにそれのように聞こえます。
編集:まあ、あなたはしません。アクティビティ内にフラグメントを埋め込むことで、ライフサイクルの2倍に対処できるようになります。

  1. 2つのフラグメント(リストと情報)が相互に通信するアクティビティがあることを確認してください。これらのフラグメントには、アクティビティによって実装されるインターフェースが必要です。
  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 に答える