Android, сохраняющий информацию по фрагментам

#android

#Android

Вопрос:

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

Я смотрю на setRetainInsance (true) и задавался вопросом, возможно ли это решение? Каков наилучший способ для фрагмента сохранить информацию, не создавая ее каждый раз с нуля.

Я использую это для переключения между фрагментами -getSupportFragmentManager().beginTransaction().replace(R.id.searchLayout, ratingFragment).commit();

Ответ №1:

Фрагмент такой же, как и любой другой объект. при транзакции фрагмента фрагмент не вызывает метод onCreate(), вместо этого он начинается с onCreateView , поэтому загрузите своих пользователей и сохраните его в переменной экземпляра и назначьте его в onCreate ()

Пример

 class MyFragment extends Fragment{


List<users> userList;

void onCreate(){
   userList = getUserList();}
//the list is loaded during Oncreate();
  

теперь представьте, что вы заменили фрагмент

теперь, согласно платформе Andorid, onCreate() больше не вызывается, вместо этого вызывается onCreateView()

 void onCreateView(){
//you can check whether instance Variable is initialised or not
if(userList != null) { 


listview.setAdapter(new Myadapter(this,userList);
  

Комментарии:

1. Это кажется очень хорошим решением и самым простым из всех, которые я видел до сих пор. Спасибо, я попробую это и дам вам знать, если это сработает!

Ответ №2:

Замените фрагмент, добавив его в backstack.

     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.addToBackStack(tag);
    fragmentTransaction.replace(container, fragment, tag);
    fragmentTransaction.commit();
  

Также создайте объект представления и верните его, если он не равен null.

     private void View view ; 
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
          if (view != null)
              return view;
          view = inflater.inflate(R.layout.fragment_browse_recipe, container, false);
     //initialize layout views
     return view;
    }