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;
}
-その他のさまざまな小さな変更
ここで見つけることができる上記の変更を説明するために、サンプル プロジェクトを作成しました。