【发布时间】:2015-12-26 19:20:23
【问题描述】:
我有一个活动,其中包含一个带有片段的视图寻呼机。我还有一个包含片段的导航抽屉。每当我启动我的应用程序时,在主要活动中,我都会将第一个片段添加到片段管理器中,因此它会在应用程序启动时显示。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
home = new FragmentHome();
mainToolbar = (Toolbar) findViewById(R.id.mainActivityToolBar);
setSupportActionBar(mainToolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
if(savedInstanceState == null){
home = new FragmentHome();
FragmentManager manager = getSupportFragmentManager();
// changed the back stack here..
String Tag = "start";
manager.beginTransaction().add(R.id.layout_container, home, Tag).commit();
getSupportActionBar().setTitle("Home");
}
FragmentNavigationDrawer fragmentNavigationDrawer = (FragmentNavigationDrawer) getSupportFragmentManager().findFragmentById(R.id.fragment_contain_drawer);
fragmentNavigationDrawer.setUpDrawer(R.id.fragment_contain_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mainToolbar);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager().putFragment(outState, "fragment", home);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(savedInstanceState != null){
home = getSupportFragmentManager().getFragment(savedInstanceState, "fragment");
}
}
@Override
public void changeToolBarTitle(String title) {
getSupportActionBar().setTitle(title);
}
在导航抽屉适配器中,我有一个方法可以获取片段并在需要时显示或添加它们。我无法解决的主要问题是我试图保持第一个片段的状态(其中包含一个带有自定义对象数组列表的回收器视图),同时切换到抽屉中的其他片段并显示它们的内容
public void onNavigationDrawerItemSelected(int position){
// Add the fragments only once
if (getFragmentManager().findFragmentByTag(navigationDrawerFragmentsTags[position]) == null)
{
fragmentTransaction.add(R.id.layout_container,navigationDrawerFragments[position],navigationDrawerFragmentsTags[position]);
}
// Hiding & Showing fragments
for(int i=0;i<navigationDrawerFragments.length;i++)
{
if(i == position)
{
fragmentTransaction.show(navigationDrawerFragments[i]);
}
else
{
// Check if the fragment is added and then hide it
if (getFragmentManager().findFragmentByTag(navigationDrawerFragmentsTags[i]) != null) {
fragmentTransaction.hide(navigationDrawerFragments[i]);
}
}
}
fragmentTransaction.commit();
}
但是添加的第一个片段总是存在于其他层之下,我无法隐藏它。我想保持它的状态,但当我要去另一个片段时也想隐藏它,我需要保留它的内容以在用户返回这个片段时显示列表。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
itemList = (ListView) v.findViewById(R.id.drawer_list_items);
adapter = new NavigationDrawerAdapter(getContext(), R.layout.drawer_item_views, addItemsToList());
itemList.setAdapter(adapter);
itemList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
onNavigationDrawerItemSelected(position);
myDrawerLayout.closeDrawers();
}
});
return v;
}
我尝试使用接口,我尝试在 google 中查找,但找不到答案。
//
【问题讨论】: