3

我有一个基于片段的布局,其中包含两个 ListFragments(A 和 B),它们都包含在一个活动中(称为 ListingActivity 1)。当应用程序启动时,ListingActivity 1 被调用,根据设备是纵向还是横向,要么只显示 ListFragment A,要么显示两个 ListFragment。

当您单击 Fragment A 的 ListView 中的某个项目时,会显示 Fragment B 的 ListView。当您单击 Fragment 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。

我打算做这样的事情,但它似乎真的很hacky:

@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);
    }
}
4

1 回答 1

1

老实说,我认为您的解决方案是实现所描述行为的正确方法。它遵守所有关于向上导航的 Android 标准(在这种情况下,它应该像“后退”按钮一样,我相信)。我唯一要重新考虑的是你对Intent.FLAG_ACTIVITY_NEW_TASK旗帜的使用。来自 Android 文档:

任务是用户为完成目标而遵循的一系列活动。

在这种情况下,您似乎并没有开始一项新任务。

于 2012-04-22T10:02:31.983 回答