[英]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.