現在、クラスの拡張で次のソリューションを使用していますListFragment
。
1)クラスでonActivityCreated
、アダプター(クラス変数)がnullかどうかを確認し、インスタンス化します。次に、フッターを次のようにインフレートします。
View footerView = View.inflate
(getActivity(), R.layout.list_footer_loader_view, null);
これを行う必要があるのは 1 回だけです。footerView とアダプタは一度だけ作成する必要があります。私はこれらの両方を自分で作成しますonActivityCreated
ここで「難しい部分」に進み、onCreate でフラグメントを次のように設定します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
onCreate
アクティビティとは関係がないので、で行うのが好きです。画面setRetainInstance(true)
の向きなどのイベントでアクティビティが破棄された後、フラグメントは再作成されません。
これらの行の後に、次のようにフッターを追加します。
getListView().addFooterView(footerView);
次に、アダプターをリストに接続します。
setListAdapter(adapter);
これは、アクティビティが終了するたびに実行する必要があります。これは で実行してくださいonActivityCreated
。
onCreate
また、フラグメントに関して一般的に考慮すべき重要な事項の 1 つは、アクティビティが呼び出されるたびにフラグメントを作成しないことです。
たとえば、次のようにします (サポート パッケージを使用していない場合)。
MyFragment myFragment = (MyFragment)
getFragmentManager().findFragmentByTag(tag);
if (myFragment == null) {
myFragment = MyFragment.newInstance();
getFragmentManager().beginTransaction().
add(myFragment, tag).commit();
}
もちろん、タグがそのフラグメントに対して一意である場合、これはフラグメントを一度だけ作成します。