Android RecyclerView视图项

Android RecyclerView视图项,android,android-recyclerview,Android,Android Recyclerview,我想在RecyclerView中显示2列,但它们显示在1列中,如下图所示: 如何在两列中显示我的视图 我在我的代码中尝试了两列: rcv_pro.setLayoutManager(new GridLayoutManager(this, 2, LinearLayoutManager.VERTICAL, false)); 但它们不显示在两列中 我在2 culmn中找到了一个用于展示的soulotion,我可以通过清除此代码来修复它: “menuList_info_models.clear();”

我想在RecyclerView中显示2列,但它们显示在1列中,如下图所示:

如何在两列中显示我的视图

我在我的代码中尝试了两列:

rcv_pro.setLayoutManager(new GridLayoutManager(this, 2, LinearLayoutManager.VERTICAL, false));
但它们不显示在两列中

我在2 culmn中找到了一个用于展示的soulotion,我可以通过清除此代码来修复它: “menuList_info_models.clear();” 但我现在有一个新的问题,当我清除cod时,我在recyclerview中的物品乱七八糟,每当我在recyclerview中搜索时,我的物品都会改变

public类MultiItem\u Music\u适配器扩展了RecyclerView.Adapter{
ArrayList对象=新的ArrayList();
语境;
私人最终静态整数音乐_CAT=1;
私人最终静态int MUSIC_ADA=2;
私有ArrayList菜单列表信息模型;
私有ArrayList cat_模型;
私人音乐适配器;
private List personList=new ArrayList();
私人回收站;
私有列表适配器mAdapter;
私人ArrayList音乐_数据;
公共网格布局经理;
公共多项目音乐适配器(ArrayList对象、上下文){
Log.e(“MyLog”、“farzad”);
this.objects=对象;
this.context=上下文;
if(菜单列表信息模型==null)
menuList_info_models=new ArrayList();
如果(cat_models==null)cat_models=new ArrayList();
adapter=新音乐适配器(menuList\u info\u型号,this.context);
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
RecyclerView.ViewHolder-ViewHolder;
LayoutFlater充气机=LayoutFlater.from(上下文);
视图;
开关(视图类型){
案例音乐(猫):
视图=充气机。充气(R.layout.music\u cat\u项目,父项,false);
viewHolder=新音乐\类别\ viewHolder(视图);
打破
case MUSIC_ADA:
视图=充气机。充气(R.layout.music\u item\u multi,parent,false);
视图持有人=新的多项目视图持有人(视图);
打破
违约:
视图=充气机。充气(R.layout.music\u item\u multi,parent,false);
视图持有人=新的多项目视图持有人(视图);
打破
}
返回视图持有者;
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
Log.e(“hamid_ali”,“----------------”);
开关(holder.getItemViewType()){
案例音乐(猫):
Cat_配置((音乐_Cat_视图支架)支架,位置);
打破
case MUSIC_ADA:
项目配置((多项目视图持有者)持有者,位置);
打破
}
}
私有无效项目配置(多项目视图持有人项目视图持有人,int pos){
MenuList_Info_Model MenuList_Info_Model=(MenuList_Info_Model)objects.get(pos);
menuList_info_models.clear();
menuList\u info\u models.add(menuList\u info\u model);
Log.e(“hamid_st”,menuList_info_models.size()+”);
manager=新的GridLayoutManager(this.context,2,LinearLayoutManager.VERTICAL,false);
item_viewHolder.rcv_multi.setLayoutManager(管理器);
item_viewHolder.rcv_multi.setAdapter(适配器);
}
专用void Cat_配置(音乐Cat_视图持有者musicCatViewHolder,int pos){
Cat_Model Cat_Model=(Cat_Model)objects.get(pos);
musicCatViewHolder.txt_cat_name.setText(cat_model.getMenu_name());
}
@凌驾
public int getItemCount(){
返回objects.size();
}
@凌驾
public int getItemViewType(int位置){
if(Cat_模型的objects.get(position)instanceof){
回归音乐与猫;
}否则{
返回音乐_ADA;
}
}
}
您可以使用

GridLayoutManager
设置为您的
RecyclerView
uising下面的代码


以下是如何与
RecyclerView一起使用的链接

您可以在两列中使用此链接:-

RvAdapter MultiItem_Music_Adapter ;
RecyclerView rcv_pro;
MultiItem_Music_Adapter = new MultiItem_Music_Adapter (getActivity());
rcv_pro.setLayoutManager(new GridLayoutManager(getActivity(), 2)); 
rcv_pro.setAdapter(MultiItem_Music_Adapter );
mRecycler.setLayoutManager(new GridLayoutManager(YourActivity.this, 2));
mRecycler.setLayoutManager(gridLayoutManager);

使用您的recyclerview设置LayoutMangaer是一种改进,否则它将无法工作。

您也可以通过
StaggedGridLayoutManager
recyclerview
中获取项目的两列

,您可以使用以下方法:

StaggedGridLayoutManager(内部跨距计数、内部方向)

或直接:

yourRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));

我必须创建两个ViewHolder查看更多代码

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    class ViewHolder0 extends RecyclerView.ViewHolder {
        ...
        public ViewHolder0(View itemView){
        ...
        }
    }

    class ViewHolder2 extends RecyclerView.ViewHolder {
        ...
        public ViewHolder2(View itemView){
        ...
    }

    @Override
    public int getItemViewType(int position) {
        // Just as an example, return 0 or 2 depending on position
        // Note that unlike in ListView adapters, types don't have to be contiguous
        return position % 2 * 2;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         switch (viewType) {
             case 0: return new ViewHolder0(...);
             case 2: return new ViewHolder2(...);
             ...
         }
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
        switch (holder.getItemViewType()) {
            case 0:
                ViewHolder0 viewHolder0 = (ViewHolder0)holder;
                ...
                break;

            case 2:
                ViewHolder2 viewHolder2 = (ViewHolder2)holder;
                ...
                break;
        }
    }
}
公共类MyAdapter扩展了RecyclerView.Adapter{ 类ViewHolder0扩展了RecyclerView.ViewHolder{ ... 公共视图持有者0(视图项视图){ ... } } 类ViewHolder2扩展了RecyclerView.ViewHolder{ ... 公共视图持有者2(视图项视图){ ... } @凌驾 public int getItemViewType(int位置){ //例如,根据位置返回0或2 //注意,与ListView适配器不同,类型不必是连续的 返回位置%2*2; } @凌驾 public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){ 开关(视图类型){ 案例0:返回新的ViewHolder0(…); 案例2:返回新的ViewHolder2(…); ... } } @凌驾 公共无效onBindViewHolder(最终RecyclerView.ViewHolder,最终整型位置){ 开关(holder.getItemViewType()){ 案例0: ViewHolder0 ViewHolder0=(ViewHolder0)holder; ... 打破 案例2: ViewHolder2 ViewHolder2=(ViewHolder2)支架; ... 打破 } } }
发布xml代码xml中没有问题您如何确定xml中没有问题?测试!代码菜单列表信息模型中有问题。clear();
yourRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    class ViewHolder0 extends RecyclerView.ViewHolder {
        ...
        public ViewHolder0(View itemView){
        ...
        }
    }

    class ViewHolder2 extends RecyclerView.ViewHolder {
        ...
        public ViewHolder2(View itemView){
        ...
    }

    @Override
    public int getItemViewType(int position) {
        // Just as an example, return 0 or 2 depending on position
        // Note that unlike in ListView adapters, types don't have to be contiguous
        return position % 2 * 2;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         switch (viewType) {
             case 0: return new ViewHolder0(...);
             case 2: return new ViewHolder2(...);
             ...
         }
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
        switch (holder.getItemViewType()) {
            case 0:
                ViewHolder0 viewHolder0 = (ViewHolder0)holder;
                ...
                break;

            case 2:
                ViewHolder2 viewHolder2 = (ViewHolder2)holder;
                ...
                break;
        }
    }
}