Когда начинается действие, он загружает NavigationDrawer
, а внутри есть 3 раздела. В первом есть RecyclerView, который работает правильно. Второй имеет PagerSlidingTabStrip
, который имеет проблемы. У третьего есть код, который изменяет PreferenceManager и работает хорошо.Странное поведение PagerSlidingTabStrip внутри NavigationDrawer
Теперь проблема заключается в том, что метод getItem()
CustomPagerAdapter
вызывается только один раз, т.е. только в первый раз, когда я нажимаю раздел «Пользователь» от NavigationDrawer
, но после навигации, когда я попытаюсь открыть его снова, getItem()
не вызывается, поэтому внутри ViewPager
ничего не инициализируется.
Затем я должен открыть приложение, и PagerSlidingTabStrip
будет работать один раз.
Прошу вас, руководствоваться. В чем может быть проблема?
UPDATE: Я сделал несколько тестов и обнаружили, что getItem()
из FragmentPagerAdapter
вызывается только один раз в первый раз я запускаю раздел 2, то при попытке запустить его снова не называется. Почему так?
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;
}
}
2-я секция - 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 - CustomAdapter:
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();
}
}
NavigationDrawer:
первый раз открыл пользователя из NavigaiontDrawer:
второй раз открыл пользователя из NavigaiontDrawer:
Если кто-нибудь может объяснить это поведение, пожалуйста, сделайте это, мне очень любопытно узнать. – Ryan