в активити есть TabLayout с ViewPager'ом, в который адаптер должен загружать 2 страницы xml
user_favs.java
userFavsAdapter favsAdapter=new userFavsAdapter(this,getSupportFragmentManager());
user_favs_viewpager.setAdapter(favsAdapter);
user_favs_tablayout.setupWithViewPager(user_favs_viewpager);
userFavsAdapter.java extends FragmentPagerAdapter
@Override
public Fragment getItem(int position) {
if (position == 0)
return new user_fav_stores();
else
return new user_fav_items();
}
В SharedPreferences уже сохранена некоторая инфа. Ее нужно получить из фрагментов
user_fav_stores.java extends Fragment
String user_id="";
String user_stores="";
public user_fav_stores(){
SharedPreferences logininfo=getContext().getSharedPreferences(Values.APP_LOGIN_INFO,MODE_PRIVATE);
/* или другие варианты */
SharedPreferences logininfo=this.getActivity().getSharedPreferences(Values.APP_LOGIN_INFO,MODE_PRIVATE);
SharedPreferences logininfo=getContext().getSharedPreferences(Values.APP_LOGIN_INFO,MODE_PRIVATE);
SharedPreferences logininfo=getContext().getApplicationContext().getSharedPreferences(Values.APP_LOGIN_INFO,MODE_PRIVATE);
/* */
if(logininfo!=null){
if(logininfo.getString("auth_type","").equals("user")) {
user_id=logininfo.getString("userid","");
user_stores=logininfo.getString("stores","");
}
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root= inflater.inflate(R.layout.user_fav_stores, container, false);
lv=(ListView)root.findViewById(R.id.user_fav_stores);
(new getUserStores()).execute();
return root;
}
user_fav_items.java аналогично
Все варианты получить SharedPreferences дают
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.support.v4.app.FragmentActivity.getSharedPreferences(java.lang.String, int)' on a null object reference
как же их получить?
Ответ
Именовать в Java надо camelCase-ом, иначе ваш код становится нечитаемым. Имена классов должны быть с большой буквы.
Конструкторы активити и фрагментов использовать нельзя. Это системные компоненты и система сама создаёт их экземпляры. Вы должны использовать только методы жизненного цикла этих компонентов.
Получить контекст можно методом фрагмента getActivity(). Но только после того, как фрагмент будет добавлен в активити. Это произойдёт только после вызова onAttach(Context context) метода фрагмента (вызов будет сделан системой после выполнения асинхронной операции добавления фрагмента)
Т.е. вы можете перенести код из конструктора фрагмента в метод onCreateView и тогда всё должно заработать.
И обязательно надо переименовать все классы и переменные чтобы код стал читаемым для джавистов.
Комментариев нет:
Отправить комментарий