2017-09-27 79 views
-2

喜的朋友,請幫助我,我用它有一個標題我所在的地方填充使用JSON數據我的問題是另外一個水平的循環視圖循環認爲,在水平回收視圖我得到只有最後一個值請在下面的代碼中找到。回收站的viewholder內

這裏的佈局,需要

enter image description here

Menu_Item_List.java

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <android.support.v7.widget.AppCompatTextView 
     android:id="@+id/menu_name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@drawable/cater_bg" 
     android:padding="4dp" 
     android:text="Break Fast" 
     android:textSize="18sp" /> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/menu_item_rv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" /> 

</LinearLayout> 

Menu.java

public class Menu_Fragment extends Fragment { 
    @BindView(R.id.menu_rv) 
    RecyclerView menu_rv; 
    FastItemAdapter<Menu_List_Item> menu_item_adapter = new FastItemAdapter<>(); 


    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.menu_fragment, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     ButterKnife.bind(this, view); 
     menu_rv.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false)); 
     menu_rv.setAdapter(menu_item_adapter); 
     menu_list(); 
    } 

    private void menu_list() { 
//  String menuurl = Constant.aloourl + "shop_menu&vendor_id=" + getActivity().getIntent().getStringExtra("catergoryid") + "&type=2"; 
     String menuurl = Constant.aloourl + "shop_menu&vendor_id=32&type=2"; 
     Constant.l(menuurl); 
     AndroidNetworking.get(menuurl).build().getAsJSONObject(new JSONObjectRequestListener() { 
      @Override 
      public void onResponse(JSONObject response) { 
       try { 
        JSONArray menuarray = response.getJSONArray("mlist"); 
        for (int i = 0; i < menuarray.length(); i++) { 
         JSONObject menuobjarray = menuarray.getJSONObject(i); 
         Iterator menuiterator = menuobjarray.keys(); 
         while (menuiterator.hasNext()) { 
          String menuname = (String) menuiterator.next(); 
          Menu_List_Item menulist = new Menu_List_Item(); 
          menulist.setMenuname(menuname); 
          JSONArray menuarrayname = menuobjarray.getJSONArray(menuname); 
          for (int j = 0; j < menuarrayname.length(); j++) { 
           JSONObject menunameobjs = menuarrayname.getJSONObject(j); 
           Menu_Item_Adapter mealslist = new Menu_Item_Adapter(); 
           mealslist.setMenu_item_id(menunameobjs.getString("mid")); 
           mealslist.setMenu_item_name(menunameobjs.getString("item")); 
           mealslist.setMenu_item_price(menunameobjs.getString("price")); 
           mealslist.setMenu_item_image(menunameobjs.getString("restaurant_subimage")); 
           menulist.setMenu_adapter(mealslist); 
          } 
          menu_item_adapter.add(menulist); 
         } 
        } 
       } catch (JSONException e) { 
        Constant.l(e.toString()); 
       } 

      } 

      @Override 
      public void onError(ANError anError) { 
       Constant.l(anError.toString()); 
      } 
     }); 
    } 
} 

Menu_Adapter.java

public class Menu_List_Item extends AbstractItem<Menu_List_Item, Menu_List_Item.Menu_List_Item_ViewHolder> { 

    String menuname; 
    Menu_Item_Adapter menu_adapter; 

    public String getMenuname() { 
     return menuname; 
    } 

    public void setMenuname(String menuname) { 
     this.menuname = menuname; 
    } 

    public Menu_Item_Adapter getMenu_adapter() { 
     return menu_adapter; 
    } 

    public void setMenu_adapter(Menu_Item_Adapter menu_adapter) { 
     this.menu_adapter = menu_adapter; 
    } 

    @Override 
    public Menu_List_Item_ViewHolder getViewHolder(View v) { 
     return new Menu_List_Item_ViewHolder(v); 
    } 

    @Override 
    public int getType() { 
     return R.id.menu_item_rv; 
    } 

    @Override 
    public int getLayoutRes() { 
     return R.layout.menu_list_item; 
    } 

    @Override 
    public void bindView(Menu_List_Item_ViewHolder holder, List<Object> payloads) { 
     super.bindView(holder, payloads); 
     holder.menu_name.setText(menuname); 
     holder.menu_item_rv.setLayoutManager(new LinearLayoutManager(holder.itemView.getContext(), LinearLayoutManager.HORIZONTAL, false)); 
     FastItemAdapter<Menu_Item_Adapter> menu_item_adapters=new FastItemAdapter<>(); 
     menu_item_adapters.add(menu_adapter); 
     holder.menu_item_rv.setAdapter(menu_item_adapters); 

    } 

    public static class Menu_List_Item_ViewHolder extends RecyclerView.ViewHolder { 
     @BindView(R.id.menu_name) 
     AppCompatTextView menu_name; 
     @BindView(R.id.menu_item_rv) 
     RecyclerView menu_item_rv; 

     public Menu_List_Item_ViewHolder(View itemView) { 
      super(itemView); 
      ButterKnife.bind(this, itemView); 
     } 
    } 
} 
+1

你可以使用只需要單一的recylerview。在第一個項目視圖的標題和第二項目視圖recylerview中設置項目類型,你可以使用水平滾動視圖。 – Vij

+0

你說了,我可以用兩個版面吧?@Vij –

+0

是bcoz這是更簡單的方法可以 – Vij

回答

0

你必須創建,即主要佈局內回收主視圖內嵌套回收視圖中添加主recyclerview內anaother回收視圖和回收view.Create水平recyclerview水平內回收的項目,如本

public class SampleRecyclerView extends RecyclerView.Adapter { 

public SampleRecyclerView() { 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.YOUR_MAIN_LAYOUT, parent, false); 
    return new SampleViewHolder(view); 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    final SampleViewHolder viewHolder = (SampleViewHolder) holder; 

    //Update your Horizontal views here into adapter 
    notifyDataSetChanged(); 


} 


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

private class SampleViewHolder extends RecyclerView.ViewHolder{ 

    private YOUR_HORIZONTAL_ADAPTER mAdapter; 
    private RecyclerView.LayoutManager mLayoutManager; 

    public SampleViewHolder(View itemView) { 
     super(itemView); 

     mAdapter = new YOUR_HORIZONTAL_ADAPTER(mClassName, mMovieItems.get(Integer.toString(position))); 
     mLayoutManager=new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false); 

     YOUR_HORIZONTAL_RECYCLER_VIEW.setLayoutManager(mLayoutManager); 
     YOUR_HORIZONTAL_RECYCLER_VIEW.setAdapter(mAdapter); 
    } 

    } 
} 

編輯:我對現有的回收視圖適配器進行了一些更改。您的嵌套回收視圖應該像這樣更新。在你的名單像YourModel.setType(1)

list.add(YourModel)

public class Menu_List_Item extends RecyclerView.Adapter { 
private Activity activity; 
private ArrayList<Menu_List_Items_Pojo> menu_list_pojo_items; 


public Menu_List_Item(Activity activity, ArrayList<Menu_List_Items_Pojo> menu_list_pojo_items) { 
    this.activity = activity; 
    this.menu_list_pojo_items = menu_list_pojo_items; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.menu_list_item, parent, false); 
    return new Menu_List_Item_ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    Menu_List_Items_Pojo menulistitempojo = menu_list_pojo_items.get(position); 
    Menu_List_Item_ViewHolder viewholder = (Menu_List_Item_ViewHolder) holder; 
    viewholder.menu_name.setText(menulistitempojo.getMenu_name()); 

    //Call this method with different positions 
    viewholder.setDataToAdapter(position); 
    notifyDataSetChanged(); 
} 

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


public class Menu_List_Item_ViewHolder extends RecyclerView.ViewHolder { 
    @BindView(R.id.menu_name) 
    AppCompatTextView menu_name; 
    @BindView(R.id.menu_item_rv) 
    RecyclerView menu_item_rv; 
    ArrayList<Menu_Item_Adapter>itemsAdapter=new ArrayList<>(); 
    Menu_Item_Adapter meudap = new Menu_Item_Adapter(); 


    public Menu_List_Item_ViewHolder(View itemView) { 
     super(itemView); 
     ButterKnife.bind(this, itemView); 
     menu_item_rv.setLayoutManager(new LinearLayoutManager(itemView.getContext(), LinearLayoutManager.HORIZONTAL, false)); 
     menu_item_rv.setAdapter(menu_adapter); 
    } 

    //Change data value each time when onBindViewHolder is called 
    public void setDataToAdapter(int position) { 
     for(int i=0;i<menu_list_pojo_items.size();i++){ 
      meudap.setMenu_item_id(menu_list_pojo_items.get(position).getMenu_mid()); 
      meudap.setMenu_item_image(menu_list_pojo_items.get(position).getMenu_restaurant_image()); 
      meudap.setMenu_item_name(menu_list_pojo_items.get(position).getMenu_item()); 
      meudap.setMenu_item_price(menu_list_pojo_items.get(position).getMenu_price()); 
      itemsAdapter.add(meudap); 

     } 
     menu_adapter.add(itemsAdapter); 
    } 

    } 
} 
+0

評論不延長討論或調試會話;這次談話一直[移動聊天](​​http://chat.stackoverflow.com/rooms/155617/discussion-on-answer-by-anonymous-recycler-inside-the-viewholder)。請通過[編輯]將所有相關信息重新納入答案。 –

0

集類型;

public class MyAdapter extends RecyclerView.Adapter<ViewHolder> { 

private ArrayList<YourModel> list = new ArrayList<YourModel>(); 

    class HeaderViewHolder extends ViewHolder { 

    public HeaderViewHolder(View itemView){ 
     super(itemView); 

    } 
} 

class ItemsVideHolder extends ViewHolder { 
    public ItemsVideHolder(View itemView) { 
     super(itemView); 

    } 
} 

    @Override 
    public int getItemViewType(int position) { 

     int type = list.get(position).getType(); 

     //1 for header 
     if(type == 1){ 

     } 

     //2 for items 
     else if(type == 2){ 

     } 
     return position ; 
    } 

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

@Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View viewItem; 
     switch (viewType) { 
      case 1: 
       viewItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.header_layout, parent, false); 
       ViewHolder vh = new HeaderViewHolder(viewItem); 
       return vh; 
      case 2: 
       viewItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.items_layout, parent, false); 
       ViewHolder vh1 = new ItemsVideHolder(viewItem); 
       return vh1; 

     } 
     return null; 
    } 

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

      case 2: 
       ItemsVideHolder viewHolder2 = (ItemsVideHolder) holder; 
       break; 
     } 
    } 
} 
+0

我試過同樣的方式havnt工作 –

+0

https://pastebin.com/wY1EUqD0這是JSON數據我解析 –

+0

好的哥們我明白你的問題,你只有一個列表中,這樣的兄弟對不起,我的理解,你可以使用一個直接圖中,你的頭部和橫向滾動視圖並不需要在您的適配器 – Vij