#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;
}