0

以前はかなりの数のフラグメントを実行しましたが、それらはすべて既存のフラグメントを拡張していました。現在は、リストフラグメントとそのアダプターを設定するだけのかなり/汚いテストですが、発生しているこの煩わしさを取り除きたいと思います。何が最善の方法か知りたいです。

これが私のFragmentActivityのonCreateです:

    @Override
    protected void onCreate(Bundle savedInstances) {
    super.onCreate(savedInstances);
    mListFrag = new ListFragment();
    getSupportFragmentManager().beginTransaction().add(android.R.id.content, mListFrag).commit();
    getSupportLoaderManager().initLoader(13, null, this).forceLoad();
    }

簡単なことですが、新しいListFragmentをインスタンス化し、それをアクティビティのメインフレームとして追加して、カーソルローダーを起動します。

カーソルローダーで、完了したら:

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {

    if (mAdapter == null) {
        mAdapter = getCallLogCursorAdapter(cursor);
        mListFrag.setListAdapter(mAdapter);
    } else {
        Cursor oldCursor = mAdapter.swapCursor(cursor);
        if (oldCursor != null)
        oldCursor.close();
    }
    }

繰り返しますが、簡単なことですが、必要に応じてアダプターを作成します。そうでない場合は、cursoを交換します。

これはすべて最初の実行で正常に機能しますが、デバイスを回転させると、回転リストとビューの中央に進行状況バーが表示されます。どういうわけか、2つのフラグメントが重なり合っているようです。プログレスバーが表示されないようにしようとしmListFrag.setRetainInstance(true);ましたが、2つのフラグメントが重なり合っており、1つはリストをスクロールするタッチを受け取り、もう1つは静的なままです。

他のアクティビティonSomething()コールバックをオーバーライドしていません。

アプリのデータ側をテストしているので、あまり手の込んだ方法をとる必要はありません。これは、DB/ローダー/コンテンツプロバイダーがすべて正常に機能しているかどうかをすばやく確認するためです。UIはまだありませんでした。

何か案は??

編集:

フラグメントを追加する代わりに置換を使用するという別の質問を見ましたが、実際には機能しませんでした。フラグメント自体の内部のすべての問題を解決しますが、クリックして前のアクティビティに戻ると、推測しますか?不確定なプログレスバーは、これらのリストフラグメントとは関係のないアクティビティの途中にあります。

アイデア?たぶん私はこのフラグメントをレイアウトxmlに貼り付ける必要がありますが、それはテストであるため、それらのリソースを作成することを避けていました。

4

2 に答える 2

0

ListFragmentでローダーを初期化する方が良いのではないですか?例:

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    adapter = new MyCursorAdapter(getActivity(), null);
    setListAdapter(adapter);
    getLoaderManager().initLoader(0, null, this);
}
于 2012-08-31T21:31:27.850 に答える
0

もう一度、ちょっと役に立たない投稿でコミュニティに申し訳ありません。

以前のアクティビティ(バックスタックにあったアクティビティ)もListFragmentを使用していたので、気づきませんでした。したがって、前のアクティビティは.addを実行し、フラグメントを複製することでした。を使用して

  getSupportFragmentManager().beginTransaction().replace(android.R.id.content, mListFrag).commit();

すべての活動で問題が解決しました

于 2012-09-05T15:05:29.083 に答える