我在MainActivity中有一个ListFragment。以下是我如何设置我的fragment对象。
FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment newFragment = new MyFragment();
fragmentTransaction.replace(R.id.framecontainer, newFragment, "tag");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
当用户按下返回按钮时,我至少需要调用操作栏和菜单来进行更改。
getActionBar().setTitle(title);
getActionBar().setDisplayHomeAsUpEnabled(isEnabled);
invalidateOptionsMenu();
我需要知道当前显示的是哪种片段,这样我才能知道如何设置操作栏。我将设置选项存储在片段中作为参数。
String title = fragment.getArguments().getString("KEY_TITLE");
boolean isEnabled = fragment.getArguments().getBoolean("KEY_ISENABLED");
我搜索了相关问题,发现可以通过调用代码片段来获取该片段。
MyFragment fragment = (MyFragment) getSupportFragmentManager()
.findFragmentByTag("tag");
然而,我必须将所有标签存储在自定义堆栈中,并在用户按下后退按钮时每次调用
onBackPressed()
中的 pop()。
因此,我的问题是,是否有一种方法可以直接从堆栈中获取当前可见的片段?
注意:请记住,片段类型不同,不仅仅是 MyFragment。
getCurrentFragment
实现中,你必须考虑到空的回退栈名称。我更喜欢使用字符串名称来避免instanceof
类型检测,并且在调试时最有帮助--通过进行回退栈遍历/循环并打印名称。 - petey