2013-08-25 6 views
9

fragmentをいくつか使って、activityに動的に追加しています。すべてがうまくいきます、私が戻るボタンを押すと、fragmentbackstackに行きます。そして、それがresumeになると、それが表示されます。しかし、毎回Resumeにあり、fragmentを作り直して、onCreateViewと呼んでいます。ライフサイクルの正常な動作であることは分かっています。レジューム後フラグメントの再作成を停止しますか?

これは私のonCreateViewです:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(
      R.layout.competitive_programming_exercise, container, false); 
    return rootView; 
} 

私は再作成から、それらのfragment Sを停止したいです。私はonSavedInstanstateで試しましたが、何も動いていません。どうすればそれを達成できますか?

答えて

4

残念ながら、フラグメントの再作成を停止することはできません。最良の方法は、フラグメントがリストアされた後、表示される前に、トランザクション内のフラグメントを削除することです。

フラグメントを直ちに削除することがわかっている場合は、onCreateView()などのメソッドを単純化して、ビュー階層全体を再び膨張させるのではなく、ダミービューを返すことでフラグメントを復元するパフォーマンスを低下させることができます。

残念なことに、このトランザクションをコミットするのに最適な場所を見つけることは難しいです。 this articleによれば、安全な場所はあまりありません。おそらくFragmentActivity.onResumeFragments()またはおそらくFragment.onResume()の中で試してみてください。

+1

ありがとうございました!いくつかのコード例が役に立ちます! :) –

9

アクティビティのonCreateViewでは、スーパーメソッドを呼び出す前にsavedInstanceStateをnullに設定します。また、 "android:viewHierarchyState"キーと "android:fragments"キーだけをsavedInstanceStateバンドルから削除することもできます。ここでは簡単な解決策のためのコードは状態をゼロに、次のとおりです。

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    savedInstanceState = null; 
    super.onCreate(savedInstanceState); 

    ... 
} 
3

Iamは5つの断片を使用して、私は前に同じ問題に直面していたとして良い私のために働い..

public class MyFragmentView1 extends Fragment { 

    View v; 
    @Override 
    public View onCreateView(LayoutInflater inflater, 
          @Nullable ViewGroup container, 
       @Nullable Bundle savedInstanceState) { 
     if (v == null) 
      v = inflater.inflate(R.layout.my_fragment_view_layout, 
       container, false 
      ); 
     return v; 
    } 
} 

私は、ビューの変数を置きますビューインスタンスがnullの場合にのみ新しいものを追加するか、それ以外の場合は前に作成したものを使用してください。

+0

これはついに私の問題を解決しました。おかげで –

+0

あなたは歓迎です@ jahsonkimulu – Sayka

関連する問題