启动一个包含片段的活动,但需要按两次物理后退按钮才能返回

时间:2015-03-22 20:08:36

标签: android android-intent android-fragments android-activity

我按照document示例(在页面中向下)在主Activity中创建了一个列表,当选择列表项时,我启动一个DetailActivity,它将一个DetailFragment添加到容器中。

(我简化了示例代码,我没有实现横向模式,只需在选择列表行时启动DetailActivity。)

在MainActivity中,单击列表项时,我执行:

 @Override
 public void onItemSelected(int index) {
      Intent intent = new Intent(this, DetailActivity.class);
      intent.putExtra("index", index);
      startActivity(intent);
}

我的 DetailActivity.java

    public static class DetailActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            if (savedInstanceState == null) {
                // During initial setup, plug in the details fragment.
                DetailsFragment details = new DetailsFragment();
                details.setArguments(getIntent().getExtras());

               //There is no layout xml for DetailActivity, we add the fragment programmatically to the activity.  
                FragmentManager fragManager = getSupportFragmentManager();
                android.support.v4.app.FragmentTransaction fragTransaction = fragManager.beginTransaction();
                fragTransaction.add(android.R.id.content, details);
                fragTransaction.addToBackStack(null);
                fragTransaction.commit();
            }
        }

DetailFragment.java:

public static class DetailsFragment extends Fragment {
    public static DetailsFragment newInstance(int index) {
        DetailsFragment f = new DetailsFragment();

        // Supply index input as an argument.
        Bundle args = new Bundle();
        args.putInt("index", index);
        f.setArguments(args);

        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
     return inflater.inflate(R.layout.fragment_detail, container, false);

    }
}
}

我运行我的应用程序,当我选择一行时,将启动DetailActivity,并在屏幕上显示DetailFragment。

但我需要按两次物理“后退”按钮才能返回MainActivity列表。为什么我需要按两次后退按钮?

我正在Android 4.4.4设备上进行测试。

1 个答案:

答案 0 :(得分:1)

因为您在运行时添加了片段。第一次按下后退按钮撤消了片段的添加。第二次完成活动。为了防止这种情况,请不要在首次将片段加载到后端堆栈时添加事务。