我正在学习 android 编程,并且在主/细节片段中向上导航时遇到问题。为了练习,我正在为我妻子的合唱团的乐谱库编写一个应用程序来跟踪作曲家的乐谱。(相当深奥,但如果我能让它工作,我会对 Android 编程有更好的理解。)
第一个屏幕是作曲家列表。从列表中选择一个会在详细信息片段中显示有关作曲家的详细信息;这工作得很好。
我有这样创建的详细信息片段:(直接来自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();
} ...
}
详细信息片段显示有关作曲家的信息(姓名、出生/死亡日期、简历等)以及一个用于查看该作曲家所创作作品的按钮。按下该按钮会调出另一个 Master / Detail Activity:
//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);
}
这工作正常,并显示该作曲家所写的作品列表。您可以选择其中一首乐曲,它会显示有关该乐曲的信息(标题、部分数、键、页数等)。如果我从乐曲中按“返回”,它会将我带回到作曲家列表先前选择的作曲家被选中。但是,如果我按“向上”(在操作栏中的图标上),它会将我带到一个显示空白详细信息片段的活动(作曲家的 id 丢失)。在这种情况下,我希望 back 和 up 的功能相同——它们都应该上升一个级别(对于作曲家列表的曲目列表)。然而,在电话上,它应该做它正在做的事情(除了保留作曲家 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 似乎在做我想做的事,还是有办法让它做我想做的事?我在这里能找到的所有问题/答案似乎都没有解决这种情况,尽管有一些很接近(而且我似乎被引导进入其中的一些圈子)。
提前致谢。