我按照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设备上进行测试。
答案 0 :(得分:1)
因为您在运行时添加了片段。第一次按下后退按钮撤消了片段的添加。第二次完成活动。为了防止这种情况,请不要在首次将片段加载到后端堆栈时添加事务。