3

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 ナビゲーションを完全に放棄する必要がありますか、それとも私がやりたいことをさせる方法はありますか? ここで見つけることができた質問/回答はどれも、この状況に対処していないように見えましたが、いくつかは近かったです(そして、それらのいくつかに丸で囲まれているように見えました).

前もって感謝します。

4

2 に答える 2

1

onItemSelected(String id)ComposerListActivity: _

if (mTwoPane) {
    Bundle args = new Bundle();
    args.putString(ComposerDetailFragment.ARG_ITEM_ID, id);
    ComposerDetailFragment fragment = new ComposerDetailFragment();
    fragment.setArguments(args);
    getFragmentManager().beginTransaction().replace(R.id.composer_detail_container, fragment).commit();
}

viewPiecesComposerDetailFragment: _

Intent i = new Intent(getActivity(), PieceListActivity.class);
intent.putExtra(ARG_ITEM_ID, getArguments().getString(ARG_ITEM_ID));
startActivityForResult(i, VIEW_PIECES_LIST);

onOptionsItemSelectedPieceListActivity: _

case android.R.id.home:
    // Add id of detail fragment as extra to intent on task stack before navigating up
    Intent upIntent = NavUtils.getParentActivityIntent(this);
    String id = getIntent().getStringExtra(ComposerDetailFragment.ARG_ITEM_ID);
    upIntent.putExtra(ComposerDetailFragment.ARG_ITEM_ID, id);
    NavUtils.navigateUpTo(this, upIntent);
    return true;

onCreateComposerListActivity: _

String id = getIntent().getStringExtra(ComposerDetailFragment.ARG_ITEM_ID);
if (id != null) onItemSelected(id);
于 2014-02-28T21:11:51.577 に答える