Собственно проблема следующая. Есть активность которая сначала загружает первый фрагмент:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_catalogs);
initFragments();
}
private void initFragments() {
CatalogsFragment fragment = new CatalogsFragment();
fragment.setListener(this);
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.content_frame, fragment);
transaction.commit();
}
В самом фрагменте я использую RecyclerView
RecyclerView mCatalogsRecyclerView;
MyStorage mStorage;
ArrayList<Catalog> mCatalogs;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_catalogs, container, false);
mCatalogsRecyclerView = (RecyclerView) view.findViewById(R.id.catalogs_recyclerview);
mCatalogsRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
mStorage = MyStorage.newInstance(getActivity());
setupUI();
return view;
}
private void setupUI() {
mCatalogs = mStorage.getCatalogs();
Log.d(TAG, "setupUI() called");
if (mAdapter == null){
mAdapter = new CatalogsAdapter(mCatalogs, this);
mCatalogsRecyclerView.setAdapter(mAdapter);
} else {
mAdapter.notifyDataSetChanged();
}
}
При первой загрузке RecyclerView все хорошо, я повесил слушателя на holder и если пользователь тыкает по view у меня загружается второй фрагмент (это код из активности)
@Override
public void openCatalog(UUID catalogId) {
ProductsFragment fragment = ProductsFragment.newInstance(catalogId);
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.content_frame, fragment);
transaction.addToBackStack(null);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.commit();
}
Он нормальльно отрабатывает. Проблема возникает когда я жму кнопку "back". У меня загружается первый фрагмент но при этом RecyclerView пустой и я получаю сообщение в андроидмониторе:
No adapter attached; skipping layout
Собственно что я делаю не так?
Сообщение No adapter attached; skipping layout
говорит о том, что для RecyclerView
не задан адаптер, то есть RecyclerView
не связан ни с какими данными.
Когда Вы возвращаетесь к первому фрагменту, получается такая ситуация, что mAdapter != null
и Вы не связываете RecyclerView
с данными.
Для решения этой проблемы необходимо строку:
mCatalogsRecyclerView.setAdapter(mAdapter);
вынести из блока if {...} else {...}
и сэтить адаптер внезависимости от условия mAdapter == null
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Сделал html форму с input multiple, на компе работает выбор нескольких файлов, а на андроиде только по 1 файлу