我想通过单击底部更改所有项目视图RecyclerView
我只是更改视图类型变量并调用notifyDataSetChanged()
通知适配器,但不做任何更改
private void ChangeAdapterView(){
if (viewType==0) {
StuffAdapter.ViewType=++viewType;
recyclerView.getAdapter().notifyDataSetChanged();
}
else if (viewType==1){
viewType=0;
StuffAdapter.ViewType=viewType;
recyclerView.getAdapter().notifyDataSetChanged();
}
}
注意::我使用灵活的布局,不需要更改跨度大小 我只想更改视图
public class StuffAdapter extends RecyclerView.Adapter< StuffAdapter.ViewHolder> {
private final Realm realm;
private final String base;
public static int ViewType=0;
public static void setViewType(int viewType) {
ViewType = viewType;
}
Picasso picasso;
Context context;
StoreView communicator;
SessionManager sessionManager;
List<StuffPOJO> data;
int sellerId;
public StuffAdapter(@Nullable List<StuffPOJO> data,
Picasso picasso, Context context,StoreView communicator) {
this.context=context;
this.picasso=picasso;
this.data=data;
base=context.getResources().getString(R.string.base_url);
this.communicator=communicator;
sessionManager=new SessionManager(context);
sellerId = sessionManager.getSellerId();
}
@NonNull
@Override
public StuffAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType==0)
return new StuffAdapter.ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_stuff1, parent, false));
else
return new StuffAdapter.ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_stuff2, parent, false));
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
StuffPOJO obj = getItem(position);
holder.bindView(obj);
}
@Override
public int getItemCount() {
return data.size();
}
@Nullable
public StuffPOJO getItem(int index) {
return data.get(index);
}
public void updateData(@Nullable List<StuffPOJO> list) {
Timber.w("updateData :" + list.size());
int size=this.data.size()+1;
data.addAll(list);
notifyItemRangeInserted(size,list.size());
}
public void reSetData(@Nullable List<StuffPOJO> list){
data.clear();
data.addAll(list);
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
return ViewType;
}
}
答案最好将静态变量用于参考视图类型,以免像这样的错误link
private void ChangeAdapterView(){
if (viewType==0) {
viewType++;
stuffAdapter.setViewType(StuffAdapter.LAYOUT_ITEM_LANDSCAPE);
stuffAdapter.notifyDataSetChanged();
}
else if (viewType==1){
viewType=0;
stuffAdapter.setViewType(StuffAdapter.LAYOUT_ITEM_PORTRAIN);
stuffAdapter.notifyDataSetChanged();
}
}
答案 0 :(得分:0)
public StuffAdapter(@Nullable List<StuffPOJO> data,Picasso picasso, Context context,StoreView communicator, int viewType) {
this.context=context;
this.picasso=picasso;
this.data=data;
***this.ViewType = viewtype; // pass int***
base=context.getResources().getString(R.string.base_url);
this.communicator=communicator;
sessionManager=new SessionManager(context);
sellerId
= sessionManager.getSellerId();
}
然后调用适配器。
答案 1 :(得分:0)
我为此做了一个图书馆:
https://github.com/sajadshokri/GhostAdapter
动态添加支持的视图类型:
public void putViewType(@LayoutRes int layout, Class<? extends RecyclerView.ViewHolder> holder) {
this.viewTypes.put(layout, holder);
}
并根据视图类型制作相关的viewholder
viewTypes.get(viewType).getConstructor(View.class).newInstance(view)
OR
只需使用该库。
答案 2 :(得分:0)
最好将静态变量用于视图类型,以避免像这样的错误link
private void ChangeAdapterView(){
if (viewType==0) {
viewType++;
stuffAdapter.setViewType(StuffAdapter.LAYOUT_ITEM_LANDSCAPE);
stuffAdapter.notifyDataSetChanged();
}
else if (viewType==1){
viewType=0;
stuffAdapter.setViewType(StuffAdapter.LAYOUT_ITEM_PORTRAIN);
stuffAdapter.notifyDataSetChanged();
}
}