我有一个基于片段的布局,其中包含两个ListFragments(A和B),它们都包含在一个活动中(称为ListingActivity 1)。应用程序启动时,将调用ListingActivity 1,具体取决于设备是纵向还是横向,只显示ListFragment A或显示两个ListFragment。
当您单击片段A的ListView中的项目时,将显示片段B的ListView。当您单击片段B的ListView中的项目时,它将转到新活动(活动1)。
我正在使用此代码(称为ListingActivity 2)来确定是否单独显示ListFragment B或与ListFragment A一起显示:
public class ListingActivity extends SherlockFragmentActivity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// If the screen is now in landscape mode, we can show the
// dialog in-line so we don't need this activity.
finish();
return;
}
if (savedInstanceState == null) {
// During initial setup, plug in the details fragment.
final ListingFragment details = new ListingFragment();
details.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(android.R.id.content, details).commit();
}
}
}
在活动1中,我使用setDisplayHomeAsUpEnabled
启用Actionbar徽标作为后退按钮,但我不确定如何处理家庭意图。当设备处于纵向模式时,用户应返回到ListingActivity 2,但如果它们处于横向模式,则应返回到ListingActivity 1。
我打算做这样的事情,但看起来真的很讨厌:
@Override
public boolean onOptionsItemSelected(final MenuItem item)
{
if (item.getItemId() == android.R.id.home)
{
final Intent intent;
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
intent = new Intent(this, ListingActivity1.class);
else
intent = new Intent(this, ListingActivity2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
答案 0 :(得分:1)
老实说,我认为您的解决方案是实现所述行为的正确方法。它遵循所有关于向上导航的Android标准(在这种情况下,它应该像“后退”按钮一样,我相信)。我唯一要考虑的是你使用Intent.FLAG_ACTIVITY_NEW_TASK
标志。来自Android文档:
任务是用户为完成目标而遵循的一系列活动。
在这种情况下,您似乎并没有开始新任务。