繁体   English   中英

查看器内的回收器

[英]Recycler inside the viewholder

嗨,朋友们,请帮助我,我正在使用具有一个标题和另一个水平回收视图的回收视图,我正在用 Json 填充数据我的问题是,在水平回收视图中,我只获得了最后一个值,请找到以下代码.

这里需要的布局

在此处输入图片说明

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>

菜单.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);
        }
    }
}

您必须在主回收器视图中创建一个嵌套的回收器视图,即在主布局中添加另一个回收器视图和该回收器视图中的水平回收器项目。像这样在主回收器视图中创建水平回收器视图

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

  }
}

编辑:我对您现有的回收站视图适配器进行了一些更改。您的嵌套回收站视图应该像这样更新。

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

  }
}

在您的列表中设置类型,如 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;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM