У меня есть одно действие, которое содержит пейджер с фрагментами в нем. У меня также есть навигационный ящик с фрагментами. когда я начинаю свое приложение, в основном я добавляю первый фрагмент в менеджер фрагментов, поэтому он будет отображаться всякий раз, когда приложение запускается.Фрагмент навигации с использованием активности
@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);
}
В адаптере навигационного ящика У меня есть метод, который получает фрагменты и показывает или добавляет их при необходимости. моя основная проблема, что я не могу понять, как решить, заключается в том, что я пытаюсь сохранить состояние первого фрагмента (который содержит просмотр recycler с массивом списка настраиваемого объекта), переключаясь на другие фрагменты в ящике и отображая их содержимое
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, но я не могу найти ответ на этот вопрос.
//
Вместо этого я заменил вместо этого, и это помогает. но когда я переключаю фрагменты, список в первом фрагменте больше не существует. фрагмент, который размещает пейджер представления, добавляется в задний стек, но все же кажется, что этот фрагмент воссоздается снова каждый раз. – Eran