当活动开始时,它会加载一个NavigationDrawer
,里面有 3 个部分。第一个有一个 RecyclerView 可以正常工作。第二个PagerSlidingTabStrip
有问题。3rd 有一些代码可以改变 PreferenceManager 并且效果很好。
现在的问题是该getItem()
方法CustomPagerAdapter
只被调用一次,即。仅当我第一次单击用户部分时,NavigationDrawer
但在导航后尝试再次打开它时getItem()
不会被调用,因此在ViewPager
.
然后我必须重新打开该应用程序并且PagerSlidingTabStrip
会工作一次。
请指导我。可能是什么问题呢?
更新:
我做了一些测试,发现第一次启动第 2 节时只调用了一次,然后当我再次尝试启动它时它没有被调用getItem()
。FragmentPagerAdapter
为什么这样?
NavigationDrawer 部分:
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getFragmentManager();
switch(position) {
case 0: //Events
fragmentManager.beginTransaction().replace(R.id.container,
EventsRecyclerViewFragment.newInstance(position + 1))
.addToBackStack(null).commit();
break;
case 1: //User
fragmentManager.beginTransaction().replace(R.id.container,
UserFragment.newInstance(position + 1))
.addToBackStack(null).commit();
break;
case 2: //Logout
prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(prefs.getBoolean(KEY_LOGIN, false)) {
prefs.edit().remove(KEY_LOGIN).apply();
prefs.edit().remove(KEY_USERNAME).apply();
prefs.edit().remove(KEY_PASSWORD).apply();
Intent intent = getIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
startActivity(intent);
Customs.mToast(getBaseContext(), "Logged-out");
}
break;
}
}
第二部分 - UserFragment:
static class UserFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
public static UserFragment newInstance(int sectionNumber) {
UserFragment fragment = new UserFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_user, container, false);
context = view.getContext();
prefs = PreferenceManager.getDefaultSharedPreferences(view.getContext());
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
mViewPager.setAdapter(new CustomAdapter(getFragmentManager(),context));
PagerSlidingTabStrip pagerSlidingTabStrip = (PagerSlidingTabStrip)view.findViewById(R.id.sliding_tabs);
pagerSlidingTabStrip.setViewPager(mViewPager);
}
}
FragmentPagerAdapter - 自定义适配器:
public class CustomAdapter extends FragmentPagerAdapter {
private SharedPreferences prefs;
private Context context;
private static final String KEY_USERNAME = "username",
KEY_PASSWORD = "password", KEY_LOGIN = "loggedin";
public CustomAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
prefs = PreferenceManager.getDefaultSharedPreferences(context);
if(!prefs.getBoolean(KEY_LOGIN, false)) {
prefs.edit().remove(KEY_USERNAME).apply();
prefs.edit().remove(KEY_PASSWORD).apply();
String[] pageTitle = {"Login", "Register"};
return pageTitle[position];
}
String[] pageTitle = {"Update", "Register"};
return pageTitle[position];
}
@Override
public Fragment getItem(int position) {
switch(position) {
case 0:
if(!prefs.getBoolean(KEY_LOGIN, false)) {
prefs.edit().remove(KEY_USERNAME).apply();
prefs.edit().remove(KEY_PASSWORD).apply();
return LoginFragment.newInstance(position + 1);
}
else {
return UpdateFragment.newInstance(position + 1);
}
case 1:
return RegisterFragment.newInstance(position + 1);
}
return null;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//container.removeView((View) object);
FragmentManager manager = ((Fragment)object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment)object);
trans.commit();
}
}
导航抽屉:
第一次从 NavigaiontDrawer 打开用户:
第二次从 NavigaiontDrawer 打开用户: