Reputation: 17858
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:
RecyclerView.Adapter
somehow in a LinearLayout
LayoutManager
that acts like a LinearLayout
would do (I think this should be possible, it sounds like a good use case for that)Is that somehow possible?
Why?
Upvotes: 2
Views: 1253
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
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