2015-12-26 2 views
0

У меня есть одно действие, которое содержит пейджер с фрагментами в нем. У меня также есть навигационный ящик с фрагментами. когда я начинаю свое приложение, в основном я добавляю первый фрагмент в менеджер фрагментов, поэтому он будет отображаться всякий раз, когда приложение запускается.Фрагмент навигации с использованием активности

@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, но я не могу найти ответ на этот вопрос.

//

ответ

0

сохранить состояние, добавьте его в backstack

и вместо добавления нового фрагмента, просто заменить фрагмент т.е. удалить старые, а затем добавить новый. т. е. фрагментTransaction.replace() вместо фрагментаTransaction.add()

+0

Вместо этого я заменил вместо этого, и это помогает. но когда я переключаю фрагменты, список в первом фрагменте больше не существует. фрагмент, который размещает пейджер представления, добавляется в задний стек, но все же кажется, что этот фрагмент воссоздается снова каждый раз. – Eran

Смежные вопросы