Я использую EventBus Green Robot для внутреннего обмена сообщениями о событиях, я хочу отображать данные в своем RecyclerView с помощью EventBus. Проблема заключается в том, что почтовое сообщение EventBus принимается правильно и отображает данные на устройствах Android 5 дюймов, но один и тот же код не работает на планшетах 7 дюймов и 10 дюймов. Он работает на всех устройствах, когда фрагмент загружается в первый раз, но когда я пытаюсь связать данные с помощью EventBus, он не работает.
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(colCount, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
SpacesItemDecoration decoration = new SpacesItemDecoration(4);
recyclerView.addItemDecoration(decoration);
recyclerView.setHasFixedSize(true);
CategoryAdapter categoryAdapter = new CategoryAdapter(new ArrayList<Category>(), mListener);
recyclerView.setAdapter(categoryAdapter);
Приведенный выше блок кода находится в моем методе onCreateView.
@Subscribe(threadMode = ThreadMode.MAIN)
public void onClassificationEvent(final EventMessage event) {
Log.e("onClassificationEvent", "onClassificationEvent AllFragment :" + event.getEventId());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (event.getEventId() == "20") {
//All
bindCategories(3);
} else if (event.getEventId() == "21") {
//Veg
bindCategories(1);
} else if (event.getEventId() == "22") {
//NonVeg
bindCategories(2);
}
}
});
}
Приведенный выше код — это мой метод подписки на EventBus.
private void bindCategories(final int classification) {
List<Category> categories = new ArrayList<>();
if (classification == 1) {
categories = DbAccessHelper.CategoriesHelper.getVegCategories(getActivity());
} else if (classification == 2) {
categories = DbAccessHelper.CategoriesHelper.getNonVegCategories(getActivity());
} else if (classification == 3) {
categories = DbAccessHelper.CategoriesHelper.getAllCategories(getActivity());
}
if (categories != null) {
if (!categories.isEmpty()) {
tvError.setVisibility(View.GONE);
recyclerView.setVisibility(View.VISIBLE);
CategoryAdapter categoryAdapter = new CategoryAdapter(categories, mListener);
recyclerView.setAdapter(categoryAdapter);
categoryAdapter.notifyDataSetChanged();
} else {
tvError.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
CategoryAdapter categoryAdapter = new CategoryAdapter(new ArrayList<Category>(), mListener);
recyclerView.setAdapter(categoryAdapter);
}
} else {
tvError.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
CategoryAdapter categoryAdapter = new CategoryAdapter(new ArrayList<Category>(), mListener);
recyclerView.setAdapter(categoryAdapter);
}
}
Этот метод используется для привязки RecyclerView к данным. Может ли кто-нибудь помочь мне найти проблему?
if (!categories.isEmpty())
? Попробуйте отладку. - person Devendra Singh   schedule 08.12.2016if()
, поскольку видимость recyclerview GONE. - person Devendra Singh   schedule 08.12.2016