1

これは私にとってはやりがいのあることです。FragmentAnctivityを拡張するMainActiviyがあります。フレームのコンテンツを変更するための1つのFrameLayoutとボタンが下にあります。これを行うには、OnCreateで以前にFrameLayoutに追加した作成済みフラグメントの表示/非表示を切り替えます。

また、1つのフラグメントにさらに多くのフラグメントをネストしています(1つのタイプのコンテンツに対して1つのフラグメントがあり、その中には、OnItemClickの後にDetailFragmentに変更されるlistFragmentがあります...再びshow / hiddenアプローチを使用します)。

問題は、2つの異なるコンテンツに1つのFragmentクラスの2つの異なるインスタンスがあるため、これら2つのインスタンスが1つの同じレイアウトファイルを使用することです。そして、それらのフラグメントの最初のものが非表示になり、2番目が表示されますが、2番目のインスタンスを介してビューを変更すると、1番目のインスタンスのレイアウトが変更され、2番目は以前と同じままになります。(理解できることを願っています)

フラグメントのライフサイクルの管理と理解は完全に間違いだと思います。誰かがこれを解決するのを手伝ってくれませんか?

どうもありがとう :)

4

1 に答える 1

1

プラクティスを使用してフラグメントの要点を理解していると思います。あなたの問題は単純です。ほぼ確実に、getActivity().findViewById(...)呼び出しを使用して自分のFragment(またはネストされたFragment)ビューにアクセスします。この場合、Activityは、ビュー階層全体から定義されたIDを持つ最初のビューを返します。

解決策は非常に単純です。getActivity().findViewById(...)構築を避け、コールバックでビューへのすべてのリンクを取得し、今後のすべての操作でこのonCreateView()リンクを正確に使用する必要があります。すべてが大丈夫だより。簡単な例を次に示します。

 private TextView mDummyText;

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

private void initMembersViews(View v) {
    mDummyText = (TextView) v.findViewById(R.id.fr_houses_list_text);
}

それがあなたを助けることを願っています!幸運を!

于 2013-02-19T05:19:22.143 に答える