8

私のアプリケーションは、マルチ ペイン レイアウトを使用して割り当てのリストを表示します。それぞれAssignmentを1つに入れることができますAssignmentCategoryDrawerLayoutを使用してすべての AssignmentCategories を表示し、ユーザーがさまざまなカテゴリを簡単に切り替えられるようにしたいと考えています。

私はそのようなレイアウトを作成することができませんでした。公式のDrawerLayout チュートリアルFragmentでは、ユーザーが項目 (私の場合は ) をクリックすると、 DrawerLayoutActivity が a に置き換わりますAssignmentCategory。私が直面している問題は、マルチ ペイン レイアウトにはFragmentActivity. Fragmentマルチ ペイン レイアウトを含むを作成する方法がわかりません。誰かがこれを行うことができましたか?

4

1 に答える 1

7

2 つのプロジェクトを組み合わせるのはそれほど難しくありません。サンプル コードでは、このDrawerLayout 例はコンテンツ フラグメントを置き換えますが、同じことを行う必要はありません。適切なデータを表示するために同じフラグメントを単純に更新することができます。この 2 つのプロジェクトを次のように実装できます。

  • マルチペイン デモ プロジェクトから開始します。
  • マルチペイン デモの 2 つのアクティビティを extends ActionBarActivity(v7) に更新します。拡張する必要はありません。FragmentActivity
  • DrawerLayoutスタート リスト アクティビティに (ドロワー プロジェクトのサンプル コード) コードを実装します (DrawerLayout詳細アクティビティには不要だと思いますが、必要に応じて実装しても問題ありません)。
  • DrawerLayout開始リスト アクティビティのレイアウトは次のようになります ( にも変更を実装する必要があることを忘れないでくださいactivity_item_twopane.xml!):

    <DrawerLayout>
         <fragment android:id="@+id/item_list" .../>
         <ListView /> <!-- the list in the DrawerLayout-->
    </DrawerLayout>
    
  • 実装を変更してDrawerItemClickListener、ユーザーがドロワー リスト アイテムをクリックしたときに、作成せずに新しいリスト フラグメントを追加する代わりに、レイアウトから単一のリスト フラグメントを更新するようにします。

    AssignmentListFragment alf = (AssignmentListFragment) getSupportFragmentManager()
            .findFragmentById(R.id.item_list);
    if (alf != null && alf.isInLayout()
            && alf.getCurrentDisplayedCategory() != position) {
        alf.updateDataForCategory(position); // the update method
        setTitle(DummyContent.CATEGORIES[alf.getCurrentDisplayedCategory()]);
    }
    
  • update メソッドは次のようになります。

    /**
    * This method update the fragment's adapter to show the data for the new
    * category
    * 
        * @param category
        *            the index in the DummyContent.CATEGORIES array pointing to the
    *            new category
    */
    public void updateDataForCategory(int category) {
        mCurCategory = category;
        String categoryName = DummyContent.CATEGORIES[category];
        List<DummyContent.Assigment> data = new ArrayList<Assigment>(
            DummyContent.ITEM_MAP.get(categoryName));
        mAdapter.clear(); // clear the old dsata and add the new one!
        for (Assigment item : data) {
                mAdapter.add(item);
        }
    }
    
    public int getCurrentDisplayedCategory() {
            return mCurCategory;
    }
    

    -その他のさまざまな小さな変更

ここで見つけることができる上記の変更を説明するために、サンプル プロジェクトを作成しました。

于 2013-10-31T12:32:42.443 に答える