prom85
prom85

Reputation: 17858

RecyclerView - use adapter in LinearLayouts (or use the RecyclerView with a corresponding LayoutManager)

I have an RecyclerView.Adapter and I don't want to copy the logic to use the views in a LinearLayout.

So I want to know if something of the following two things is possible:

Is that somehow possible?

Why?

Upvotes: 2

Views: 1253

Answers (2)

Christopher
Christopher

Reputation: 10269

We solve this by creating a different controller, which binds only one single view.

The controller:

ViewItemController
   static class ItemViewHolder {
        View txtTitle;
   }

   private ItemViewHolder holder;

   public void bindView(Object dataModel) {
       holder.txtTitle.setText(dataModel.toString());
   }

   public void createViewHolder(View root) {
        holder = new ItemViewHolder;
        // Populate holder with Butterknife/findViewById
   }
}

Usage in RecyclerAdapter:

public static class ViewHolder extends RecyclerView.ViewHolder {
    public ViewItemController itemController;
    public ViewHolder(View itemView) {
        super(itemView);
        itemController = new ViewItemController();
        itemController.createViewHolder(itemView);
    }
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.itemController.bindView(model.get(position));
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
     View itemView = inflateLayout...
     return new ViewHolder(itemView);
}

Usage in a detailview:

private void bindDetailView(View itemView, Object dataModel) {
    ViewItemController itemController = new ViewItemController();
    itemController.createViewHolder(itemView);
    itemController.bindView(dataModel);
} 

Upvotes: 1

SnyersK
SnyersK

Reputation: 1296

I don't think it's possible (or if it is, that it's recommended) to have an expanded RecyclerView.

If you do want to add all the items from your adapter in a linearlayout, I suppose you could do something like this:

   LinearLayout ll = findViewById(R.id.linearLayout);

    for(int position=0; position<mAdapter.getItemCount(); position++){
        RecyclerView.ViewHolder holder = mAdapter.onCreateViewHolder(ll, mAdapter.getItemViewType(position));
        mAdapter.onBindViewHolder(holder, position);

        ll.addView(holder.itemView);
    }

Upvotes: 2

Related Questions