В моем приложении есть фрагмент, содержащий ListView
.Элементы списка доступны для щелчка мышью, поэтому открывается новое действие и продолжается получение необходимой информации из элемента списка.Когда я возвращаюсь из этого действия к своему Fragment
, оно перезагружается, но я бы не хотел снова получать все данные и просто возвращаться к нему.Я заметил, что есть и другие вопросы о том, как предотвратить перезагрузку при изменении Fragment
, но я не нашел работающего решения о переходе на другое действие и возврате без принудительной перезагрузки.Есть ли способ предотвратить это и в этом случае?И реализовано ли оно в MainActivity
или в конкретном Fragment
тогда?
My MainActivity с ViewPager
:
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
public BottomNavigationView bottomNavigationView;
QuestionsFragment questionsFragment;
GroupsFragment groupsFragment;
ProfileFragment profileFragment;
MenuItem prevMenuItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Initializing viewPager
viewPager = (ViewPager) findViewById(R.id.viewpager);
//Initializing the bottomNavigationView
bottomNavigationView = (BottomNavigationView)findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_questions:
viewPager.setCurrentItem(0);
break;
case R.id.navigation_groups:
viewPager.setCurrentItem(1);
break;
case R.id.navigation_profile:
viewPager.setCurrentItem(2);
break;
}
return false;
}
});
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (prevMenuItem != null) {
prevMenuItem.setChecked(false);
}
else
{
bottomNavigationView.getMenu().getItem(0).setChecked(false);
}
Log.d("page", "onPageSelected: "+position);
bottomNavigationView.getMenu().getItem(position).setChecked(true);
prevMenuItem = bottomNavigationView.getMenu().getItem(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
setupViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
questionsFragment = new QuestionsFragment();
groupsFragment = new GroupsFragment();
profileFragment = new ProfileFragment();
adapter.addFragment(questionsFragment);
adapter.addFragment(groupsFragment);
adapter.addFragment(profileFragment);
viewPager.setAdapter(adapter);
int limit = adapter.getCount();
viewPager.setOffscreenPageLimit(limit);
}
}
Фрагментом, к которому я хотел бы вернуться:
public class QuestionsFragment extends Fragment {
private RecyclerView recyclerView;
private RecyclerView.Adapter recyclerViewAdapter;
private RecyclerView.LayoutManager recyclerViewlayoutManager;
private List<QuestionModel> questionList;
public QuestionsFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_questions, container, false);
//fill questionList
recyclerViewAdapter = new RecyclerViewQuestionAdapter(questionList, getActivity());
recyclerView.setLayoutManager(recyclerViewlayoutManager);
recyclerView.setAdapter(recyclerViewAdapter);
return view;
}
}