2017-09-27 1 views
-2

Hallo Freunde bitte helft mir ich benutze die Recycling-Ansicht, die eine Überschrift und eine andere horizontale Recycling-Ansicht, wo ich die Daten mit Json bevölkern mein Problem ist, dass in der horizontalen Recycling-Ansicht bekomme ich nur letzten Wert in dem finden sie bitte den untenstehenden code.Recycler in den Viewholder

Hier Layout, das

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

brauchen
+1

können Sie es tun, erfordert nur einzelne recylerview. In der ersten Artikelansicht für die Kopfzeile und der zweiten Artikelansicht können Sie den Artikeltyp in der Recyleransicht festlegen. Sie können die horizontale Bildansicht verwenden. – Vij

+0

Sie sagen, dass ich zwei Layout richtig verwenden kann? @Vij –

+0

ja bcoz es ist einfacher Weg – Vij

Antwort

0

Sie haben einen verschachtelten Recycler Blick in Inneren Haupt Recycler Blick ins Inneren Haupt Layout hinzufügen anaother Recycler Ansicht und horizontal Recycler Elemente innerhalb dieser Recycler view.Create horizontal recyclerview innen Haupt recyclerview wie dies

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); 
    } 

    } 
} 

EDIT dh erstellen: Ich habe einige Änderungen an Ihrem vorhandenen Recycler-Ansichtsadapter vorgenommen. Ihre verschachtelte Recycler-Ansicht sollte so aktualisiert werden.

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

Kommentare sind nicht für erweiterte Diskussion oder Debugging-Sitzungen; Diese Konversation wurde zum Chat verschoben (http://chat.stackoverflow.com/rooms/155617/discussion-on-answer-by-anonymous-recycler-inside-the-viewholder). Bitte füge alle relevanten Informationen durch [Bearbeiten] in die Antwort ein. –

0

Settyps in Ihrer Liste wie YourModel.setType (1)

list.add (YourModel);

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

Ich hatte versucht, auf die gleiche Weise hat es funktioniert –

+0

https://pastebin.com/wY1EUqD0 das ist die JSON-Daten, die ich analysiere –

+0

ok Bro verstehe ich dein Problem, Sie haben nur eine Liste so bm Entschuldigung für mein Verständnis können Sie direkt verwenden Ansicht, in der Ihre Kopfzeile und horizontaler Bildlauf nicht zwei Ansichtselemente in Ihrem Adapter benötigen – Vij

Verwandte Themen