Я применяю Recyclerview, используя привязку данных в MVVM с чистой архитектурой.Как применить layoutManager для создания сетки из двух столбцов?
Я использовал layoutManager и spancount для создания столбцов в xml, но это не работает таким образом.Я видел много учебных пособий, в которых люди не использовали привязку данных в режиме повторного просмотра полностью.
public class StoreHomeAdapter extends RecyclerView.Adapter<StoreHomeAdapter.GenericViewHolder> {
private int layoutId;
private List<StoreHomeFields> storeNames;
private StoreHomeViewModel viewModel;
public StoreHomeAdapter(@LayoutRes int layoutId, StoreHomeViewModel viewModel) {
this.layoutId = layoutId;
this.viewModel = viewModel;
}
private int getLayoutIdForPosition(int position) {
return layoutId;
}
@Override
public int getItemCount() {
return storeNames == null ? 0 : storeNames.get(0).getResult().length;
}
public GenericViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
ViewDataBinding binding = DataBindingUtil.inflate(layoutInflater, viewType, parent, false);
return new GenericViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull GenericViewHolder holder, int position) {
holder.bind(viewModel, position);
}
@Override
public int getItemViewType(int position) {
return getLayoutIdForPosition(position);
}
public void setStoreHomes(List<StoreHomeFields> mStoreNames) {
this.storeNames = mStoreNames;
}
class GenericViewHolder extends RecyclerView.ViewHolder {
final ViewDataBinding binding;
GenericViewHolder(ViewDataBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
void bind(StoreHomeViewModel viewModel, Integer position) {
// viewModel.fetchStoreHomeImagesAt(position);
binding.setVariable(BR.viewModel, viewModel);
binding.setVariable(BR.position, position);
binding.executePendingBindings();
}
}
Вот класс ViewModel
public class StoreHomeViewModel extends ViewModel {
private StoreHomeAdapter adapter;
public void init() {
storeHomeFields = new StoreHomeModel();
adapter = new StoreHomeAdapter(R.layout.store_home_item, this);
}
public StoreHomeAdapter getAdapter() {
return adapter;
}
public ArrayAdapter getCityAdapter() {
return cityAdapter;
}
public void setStoreNamesInAdapterObj(List<StoreHomeFields> mStores) {
this.adapter.setStoreHomes(mStores);
this.adapter.notifyDataSetChanged();
}
}
Вот XML
<android.recyclerview.widget.RecyclerView
android:id="@+id/grid_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:setAdapter="@{model.getAdapter()}"
app:spanCount="2"
apps:orientation="vertical" />