2017-09-19 183 views
1

我要显示在RecyclerView 2列,但他们表现出的1列喜欢这张照片:RecyclerView查看项目

1

我怎么能显示我在2列有何看法?

我尝试在我的代码以2列:

rcv_pro.setLayoutManager(new GridLayoutManager(this, 2, LinearLayoutManager.VERTICAL, false)); 

但他们没有在2列显示。

我找到秀soulotion在2 culmn,我可以修复它丝毫清楚这个代码: “menuList_info_models.clear();” ,但我有一个新的probem现在,当我清除鳕鱼,我在项目recyclerview是乱七八糟的,任何时候我在recyclerview scrole,我的项目更改

2

public class MultiItem_Music_Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
    ArrayList<Object> objects = new ArrayList<Object>(); 
    Context context; 

    private final static int MUSIC_CAT = 1; 
    private final static int MUSIC_ADA = 2; 
    private ArrayList<MenuList_Info_Model> menuList_info_models; 
    private ArrayList<Cat_Model> cat_models; 
    private Music_Adapter adapter; 
    private List<MenuList_Info_Model> personList = new ArrayList<>(); 
    private RecyclerView recyclerView; 
    private ListAdapter mAdapter; 
    private ArrayList<MenuList_Info_Model> music_data; 
    public GridLayoutManager manager ; 

    public MultiItem_Music_Adapter(ArrayList<Object> objects, Context context) { 
     Log.e("MyLog","farzad"); 
     this.objects = objects; 
     this.context = context; 
     if (menuList_info_models == null) 
      menuList_info_models = new ArrayList<MenuList_Info_Model>(); 
     if (cat_models == null) cat_models = new ArrayList<Cat_Model>(); 

     adapter = new Music_Adapter(menuList_info_models, this.context); 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     RecyclerView.ViewHolder viewHolder ; 
     LayoutInflater inflater = LayoutInflater.from(context); 
     View view; 
     switch (viewType) { 
      case MUSIC_CAT: 
       view = inflater.inflate(R.layout.music_cat_item, parent, false); 
       viewHolder = new Music_cat_ViewHolder(view); 
       break; 
      case MUSIC_ADA: 
       view= inflater.inflate(R.layout.music_item_multi, parent, false); 
       viewHolder = new Multi_item_ViewHolder(view); 
       break; 
      default: 
       view = inflater.inflate(R.layout.music_item_multi, parent, false); 
       viewHolder = new Multi_item_ViewHolder(view); 
       break; 
     } 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     Log.e("hamid_ali", "---------------------"); 
     switch (holder.getItemViewType()) { 
      case MUSIC_CAT: 
       Cat_Config((Music_cat_ViewHolder) holder,position); 
       break; 
      case MUSIC_ADA: 
       item_Config((Multi_item_ViewHolder) holder,position); 
       break; 
     } 
    } 
    private void item_Config(Multi_item_ViewHolder item_viewHolder,int pos) { 
     MenuList_Info_Model menuList_info_model = (MenuList_Info_Model) objects.get(pos); 
     menuList_info_models.clear(); 
     menuList_info_models.add(menuList_info_model); 
     Log.e("hamid_st",menuList_info_models.size() +""); 
     manager = new GridLayoutManager(this.context, 2, LinearLayoutManager.VERTICAL, false); 
     item_viewHolder.rcv_multi.setLayoutManager(manager); 
      item_viewHolder.rcv_multi.setAdapter(adapter); 
    } 

    private void Cat_Config(Music_cat_ViewHolder musicCatViewHolder,int pos) { 
     Cat_Model cat_model = (Cat_Model) objects.get(pos); 
     musicCatViewHolder.txt_cat_name.setText(cat_model.getMenu_name()); 

    } 

    @Override 
    public int getItemCount() { 
     return objects.size(); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (objects.get(position) instanceof Cat_Model) { 
      return MUSIC_CAT; 
     } else { 

      return MUSIC_ADA; 
     } 
    } 
} 
+0

后您的XML代码 – Anonymous

+0

在xml中没有问题 –

+0

@ hamid.fathi使用** GridLayoutManager **就像我下面的答案https://stackoverflow.com/a/46291935/7666442 –

回答

2

可以使用GridLayoutManager

设置GridLayoutManagerRecyclerView uisng下面的代码

GridLayoutManager gridLayoutManager = new GridLayoutManager(MainActivity.this, 2); 
recyclerView.setLayoutManager(gridLayoutManager); 

这里是链接如何使用GridLayoutManagerRecyclerView

2
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); 
0

你可以试试这个2列: -

mRecycler.setLayoutManager(new GridLayoutManager(YourActivity.this, 2)); 
mRecycler.setLayoutManager(gridLayoutManager); 

这是mendato ry用你的recyclerview setLayoutMangaer,否则它将无法工作。

0

您也可以通过StaggeredGridLayoutManager获得RecyclerView中物品的两列。

documentation,你可以用下面的方法:

StaggeredGridLayoutManager(INT spanCount,诠释方向)

StaggeredGridLayoutManager yourStaggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); 
yourRecyclerView.setLayoutManager(staggeredGridLayoutManager); 

或者直接:

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