Android プログラミングを学習していますが、マスター/詳細フラグメントでのナビゲーションに問題があります。練習のために、妻の聖歌隊の楽譜ライブラリ用に、作曲家ごとに楽譜を追跡するアプリケーションをまとめています。(かなり難解ですが、これを機能させることができれば、Android プログラミングの理解が深まります。)
最初の画面は Composer のリストです。リストから 1 つを選択すると、コンポーザーに関する詳細が詳細フラグメントに表示されます。これはうまく機能しています。
私はこのように作成されている詳細フラグメントを持っています:(Eclipseによって提供されたテンプレートからまっすぐ)
//In ComposerListActivity.java
public void onItemSelected(String id) {
if (mTwoPane) {
// In two-pane mode, show the detail view in this activity by
// adding or replacing the detail fragment using a
// fragment transaction.
Bundle arguments = new Bundle();
arguments.putString(ComposerDetailFragment.ARG_ITEM_ID, id);
ComposerDetailFragment fragment = new ComposerDetailFragment();
fragment.setArguments(arguments);
getFragmentManager()
.beginTransaction()
.replace(R.id.composer_detail_container, fragment)
.commit();
} ...
}
詳細フラグメントには、作曲者に関する情報 (名前、生年月日、生年月日、略歴など) と、その作曲家が作曲した曲を表示するためのボタンが表示されます。そのボタンを押すと、別のマスター/詳細アクティビティが表示されます。
//In ComposerDetailFragment.java
protected void viewPieces() {
Intent intent = new Intent(this.getActivity(), PieceListActivity.class);
intent.putExtra(COMPOSER_ID, this.dataObject.getId());
this.getActivity().startActivityForResult(intent, VIEW_PIECES_LIST);
}
これは問題なく動作し、その作曲家によって書かれた曲のリストが表示されます。曲の 1 つを選択すると、その曲に関する情報 (タイトル、パート数、キー、ページ数など) が表示されます。曲から「戻る」を押すと、作曲者のリストに戻ります。以前に選択された作曲家が選択されました。ただし、(アクション バーのアイコンで) 「上」を押すと、空白の詳細フラグメントを示すアクティビティに移動します (作曲者の ID は失われます)。この場合、back と up は同じように機能するはずです。どちらも 1 レベル上に移動する必要があります (曲のリストから作曲者のリストまで)。ただし、電話では、それが行っていることを行う必要があります(作曲者IDを保持することを除いて、それは私が推測する別の問題です)。
//In PieceListActivity.java
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// This ID represents the Home or Up button. In the case of this
// activity, the Up button is shown. Use NavUtils to allow users
// to navigate up one level in the application structure. For
// more details, see the Navigation pattern on Android Design:
//
// http://developer.android.com/design/patterns/navigation.html#up-vs-back
//
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
これを達成するために何をする必要がありますか? back が私がやりたいことをしているように見えるので、ここで Up ナビゲーションを完全に放棄する必要がありますか、それとも私がやりたいことをさせる方法はありますか? ここで見つけることができた質問/回答はどれも、この状況に対処していないように見えましたが、いくつかは近かったです(そして、それらのいくつかに丸で囲まれているように見えました).
前もって感謝します。