Как создать 2 столбца в Recyclerview, используя привязку данных - PullRequest
0 голосов
/ 02 апреля 2019

Я применяю 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" />
...