【发布时间】:2014-09-25 20:58:03
【问题描述】:
我在将片段事务添加到后台堆栈时遇到问题。我有一个主要活动,我在其中使用菜单片段填充我的布局:
public class MainActivity extends ActionBarActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getFragmentManager().beginTransaction().add(R.id.frag_container, new MainMenuFragment()).commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
然后,在 MainMenuFragment 中,用户选择了一些选项,从而将菜单片段替换为其他片段:
public class MainMenuFragment extends Fragment implements OnItemClickListener{
GridView grid;
FragmentManager manager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.main_menu_fragment, container, false);
manager = getActivity().getFragmentManager();
grid = (GridView) root.findViewById(R.id.gridView1);
grid.setAdapter(new MenuTileAdapter(getActivity()));
grid.setOnItemClickListener(this);
return root;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FragmentTransaction trans = manager.beginTransaction();
if (position == 0){
trans.replace(R.id.frag_container, new BasicSettingsFragment());
trans.addToBackStack(null);
trans.commit();
}
}
}
据我所知,这应该是这样,当用户按下他们设备上的返回按钮时,他们将被带回菜单片段,但是这会退出应用程序。我做错了什么?
【问题讨论】:
-
尝试添加而不是替换 trans.add(R.id.frag_container, new BasicSettingsFragment());
-
另外,我只是注意到在旋转屏幕时,菜单片段根本没有被删除,只是被隐藏了。当我旋转手机时,它出现在
BasicSettingsFragment上。 @GeorgianBenetatos 添加只将新片段放在前一个片段之上。 -
你应该发布完整的 MainMenuFragment 代码,一切看起来都很好。
-
frag_container 是 activity_main 中的框架布局吗?
-
@GeorgianBenetatos 我刚刚用完整的代码更新了帖子。 frga_container 确实是在 activity_main 的 XML 文件中定义的 FrameLayout。
标签: android android-fragments back-stack