0

インターネットからコンテンツを取得するリストビューを配置したフラグメントがあります。行をクリックしてリストビューに戻ると、データが再び取得されますが、リストビューの最後の状態を維持したいのですが、どうすればそれを行うことができますか?

public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
    mRootView = inflater.inflate(R.layout.fragment_list, container, false);

    list = (ListView) mRootView.findViewById(R.id.mainList);
    footerView = ((LayoutInflater) G.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
            .inflate(R.layout.listfooter, null, false);
    mainInfoList = new ArrayList<MainInfo>();

    mainInfoAdapter = new AdapterMainInfo(getActivity(), R.id.mainList, mainInfoList);
    list.setAdapter(mainInfoAdapter);
}

...

4

1 に答える 1

0

これは、次の 2 つの方法で可能です。

1. フラグメント トランザクション タイプ:これは脆弱性のない最良の方法です。

フラグメント トランザクションには、置換または削除ではなく追加を使用します。

Fragment1>>(追加)>>Fragment2

このシナリオでは、フラグメント 2 からフラグメント 1 に戻ったときに、そのビューは再度作成されません。onCreateView は再度呼び出されないためです。

2. コード管理

アプリにとって重要な作業のために、fragment1 から fragment2 へのフラグメント トランザクションに replace または remove のみを使用する場合。

したがって、onCreateView で 1 つのことを行い、rootview を確認します。ルート ビューが null の場合は、新しいビューを作成するか、そこで起こっていることをそのままにしておきます。

public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
    if(mRootView==null){
       mRootView = inflater.inflate(R.layout.fragment_list, container, false);
    }else {
        container.removeView(rootView);
    }
}
于 2016-12-13T11:41:53.283 に答える