【发布时间】:2019-05-05 16:17:03
【问题描述】:
在我的应用程序中,我有一个包含ListView 的片段。列表中的项目是可点击的,因此会打开一个新活动并继续使用列表项中的必要信息。当我从该活动返回到我的Fragment 时,它会重新加载,但我不想再次获取整个数据而只是恢复它。
我注意到还有其他关于如何在更改Fragment 时防止重新加载的问题,但是我没有找到一个可行的解决方案来改变到另一个活动并在不强制重新加载的情况下返回。在这种情况下也有办法防止它吗?那么它是在MainActivity 还是特定的Fragment 中实现的呢?
我的 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;
}
}
【问题讨论】:
-
我觉得Android ViewModel可以帮到你
标签: android android-fragments android-recyclerview fragment