【问题标题】:Cant see another view type in recycler view在回收站视图中看不到其他视图类型
【发布时间】:2017-10-21 19:23:15
【问题描述】:

我有一个 recyclerview,我想显示两个布局。为此,我使用了视图类型和不同的视图持有者。并相应地加载,但我只能看到项目列表而不是标题布局。

没有发现任何错误以识别任何问题。当我调试时发现它没有进入另一个视图类型,布局没有显示出来。

适配器:

public class TransportListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

        private Context context;
        private ArrayList<Transport> list;
        private TransportListFragment transportListFragment;
        static final int TYPE_LOAD_TRANSPORT = 0, TYPE_LOAD_PROGRESS = 2, LOAD_TRANSPORT_ITEMS_HEADER = 1;


        public TransportListAdapter(Context context, ArrayList<Transport> list,TransportListFragment transportListFragment) {
            this.context = context;
            this.list = list;
            this.transportListFragment = transportListFragment;
        }

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {

            RecyclerView.ViewHolder viewHolder = null;
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            switch (viewType) {

                case LOAD_TRANSPORT_ITEMS_HEADER:
                    View v_order_header = inflater.inflate(R.layout.transport_rout, parent, false);
                    viewHolder = new LoadTransportHeader(v_order_header);
                    break;

                case TYPE_LOAD_TRANSPORT:
                    View v_order_items = inflater.inflate(R.layout.transport_item, parent, false);
                    viewHolder = new TransportListHolder(v_order_items);
                    break;

            }

            return viewHolder;
        }

        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

            if (getItemViewType(position) == TYPE_LOAD_TRANSPORT) {
                TransportListHolder transportListHolder = (TransportListHolder) holder;
                retriveAllTransports(transportListHolder, position);
            }
            else if (getItemViewType(position) == LOAD_TRANSPORT_ITEMS_HEADER ) {
                LoadTransportHeader loadTransportHeader = (LoadTransportHeader) holder;
                retriveTransportHeader(loadTransportHeader, position);
            }

        }

        @Override
        public int getItemViewType(int position) {

            Object obj = list.get(position);

            if (obj instanceof Transport) {
                return TYPE_LOAD_TRANSPORT;
            }
            else if (obj instanceof LoadTransportHeader) return LOAD_TRANSPORT_ITEMS_HEADER;

            return super.getItemViewType(position);
        }

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

    public void retriveTransportHeader(final LoadTransportHeader holder, int position) {

    }
        public void retriveAllTransports(final TransportListHolder holder, int position) {

            final Transport data = (Transport) list.get(position);

            holder.tv_product.setText(data.getmProductName());
            holder.tv_dateTime.setText(data.getmDateTime());
            holder.tv_username.setText(String.valueOf(data.getmUserName()));

            String url = "http://104.131.162.126/testslim/v1/src/images/" + data.getmProductImg();

            Picasso.with(context)
                    .load(url)
                    .resize(400, 400)
                    .placeholder(R.drawable.product)
                    .error(R.drawable.product)
                    .into(holder.img_product);
        }

}

请帮忙。谢谢。。

【问题讨论】:

  • 移除 return super.getItemViewType(position);从getItemViewType
  • 那我应该返回什么?它要求退货声明。 @DivyeshPatel
  • 然后返回除视图持有者类型以外的任何类型

标签: java android layout view android-recyclerview


【解决方案1】:

ArrayList 列表;

您只是传递一种类型的数组,即 Transport

 public int getItemViewType(int position) {

        Object obj = list.get(position); // list is of only type Transport

        if (obj instanceof Transport) {
            return TYPE_LOAD_TRANSPORT;  // it will always return this
        }
        else if (obj instanceof LoadTransportHeader) return LOAD_TRANSPORT_ITEMS_HEADER;

        return super.getItemViewType(position);
    }

【讨论】:

    【解决方案2】:

    private ArrayList&lt;Transport&gt;列表更改为private ArrayList&lt;Object&gt; list;

    它显示一种类型,因为您的 List 仅适用于 Transport 对象。

    public int getItemViewType(int position) {
    
            Object obj = list.get(position);
    
            if (obj instanceof Transport) {
                return TYPE_LOAD_TRANSPORT;
            }
            else if (obj instanceof LoadTransportHeader) 
                return LOAD_TRANSPORT_ITEMS_HEADER;
    
            return super.getItemViewType(position);
        }
    

    在活动/片段中..

    List<Object> objects = new Arraylist();
    objects.add(new Transport("","",""));
    objects.add(new LoadTransportHeader("","",""));
    objects.add(new Transport("","",""));
    objects.add(new LoadTransportHeader("","",""));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多