首页 文章

Android:RecyclerView Click Listener没有进入适配器

提问于
浏览
3

我有一个600项的数组 . 我已将所有数组项放在RecyclerView中,并且它们滚动得很好 . 但是,当我尝试访问onClick监听器时,它没有被调用 . 我还尝试在我的ViewHolder类中实现View.OnClickListener和Override onClick,但它不起作用 .

当用户单击视图中的一个项目时,我想要对列表中单击的项目的Toast数据进行Toast

Adapter code is

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

public static class ViewHolder extends RecyclerView.ViewHolder
    implements View.OnClickListener {
private String mItem;
private TextView mTextView;

public ViewHolder(View view) {
    super(view);
    view.setOnClickListener(this);
    mTextView = (TextView) view.findViewById(R.id.item_title);
}

public void setItem(String item) {
    mItem = item;
    mTextView.setText(item);
}

@Override
public void onClick(View view) {
    Log.d("TAG", "onClick " + getPosition() + " " + mItem);
}
}

 private String[] mDataset;

 public MyAdapter(String[] dataset) {
  mDataset = dataset;
}

@Override
 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
        .inflate(R.layout.item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
  }

@Override
 public void onBindViewHolder(ViewHolder holder, int position) {
  holder.setItem(mDataset[position]);
  }

@Override
public int getItemCount() {
 return mDataset.length;
 }
}

3 回答

  • 0
    Try this..
    
    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>  {
    
      public static class ViewHolder extends RecyclerView.ViewHolder
               {
        private String mItem;
        private TextView mTextView;
    
        public ViewHolder(View view) {
          super(view);
          mTextView = (TextView) view.findViewById(R.id.item_title);
    
    
        }
    
        public void setItem(String item) {
          mItem = item;
          mTextView.setText(item);
        }
    
        private String[] mDataset;
    Context context;
        public MyAdapter(Context context,String[] dataset) {
        this.context=context;
          mDataset = dataset;
        }
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
          View v = LayoutInflater.from(parent.getContext())
                  .inflate(R.layout.item, parent, false);
          ViewHolder vh = new ViewHolder(v);
          return vh;
        }
    
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
    
        holder.setOnClickListener(new ItemClicklistener(position);
          holder.setItem(mDataset[position]);
        }
    
        @Override
        public int getItemCount() {
          return mDataset.length;
        }
    
    
          class ItemClicklistener implements View.OnClickListener {
            private  int position;
    
            ItemClicklistener(int position) {
    
                this.position = position;
            }
    
            @Override
            public void onClick(View view) {
               Toast.makeText(context,"OnClick :"+position,Toast.LENGTH_SHORT).show();
    
    
            }
        }
    
    
      }
    
  • 3
    public class MyAdapter extends RecyclerView.Adapter {
                private final int VIEW_ITEM = 1;
                private final int VIEW_PROG = 0;
                private List<MyModel> list; 
                View v1;
                RecyclerView.ViewHolder vh;
    
                public MyAdapter(List<MyModel> lists) {
                    list = lists;
    
                }
    
                @Override
                public int getItemViewType(int position) {
                    return list.get(position) != null ? VIEW_ITEM : VIEW_PROG;
                }
    
                @Override
                public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                                  int viewType) {
                    if (viewType == VIEW_ITEM) {
    
                        v1 = LayoutInflater.from(parent.getContext()).inflate(
                                R.layout.item, parent, false);
                        vh = new MyViewHolder(v1);
                        return vh;
                    }
                }
    
    
                @Override
                public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    
                    if (holder instanceof MyViewHolder) {
    
                       final MyModel mymodel= (MyModel) list.get(position);
    
                        ((MyViewHolder) holder).mTextView.setText(mymodel.getItem());
    
                        ((MyViewHolder) holder).mTextView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
    
                                 Log.d("TAG", "onClick " + Integer.toString(position) + " " + mymodel.getItem());
                            }
                        });
    
                    }
    
                }
    
                @Override
                public int getItemCount() {
                    return list.size();
                }
    
    
                public static class MyViewHolder extends RecyclerView.ViewHolder {
    
                    public TextView;
    
                    public MyViewHolder(View view) {
                        super(view);
                         mTextView = (TextView) view.findViewById(R.id.item_title);
                    }
                }
    
    
            }
    
    
        // List Item Stored
    
    
        public class MyModel extends Application implements Serializable {
    
            private static final long serialVersionUID = 1L;
    
            private String item,
    
            public MyModel() {}
    
            public MyModel(String itemtext) {
                this.item = itemtext;
            }
    
            public String getItem() {return  item;}
    
            public void setItem(String id){ this.item = item;}
    
    
        }
    
    
    
    //use this code in main activity
    
    List<MyModel> Listitem = new ArrayList<CarListGetterSetter>();
    for(int i=0;i<600;i++){
    Listitem.add(new MyModel("hi"+i);
    }
    
     RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
     recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));
     MyAdapter mAdapter = new MyAdapter(Listitem);
     recyclerView.setAdapter(mAdapter);
    
  • 0

    您可以通过这种方式实现RecyclerView适配器,以支持onItemCLick和OnItemLongClick

    public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.ViewHolder>{
    
    ArrayList<Person> data;
    Context context;
    HashMap<String, Integer> screenDetails;
    
    
    private static ClickListener clickListener;
    
    public interface ClickListener {
        void onItemClick(int position, View v);
        void onItemLongClick(int position, View v);
    }
    
    public void setOnItemClickListener(ClickListener clickListener) {
        PersonAdapter.clickListener = clickListener;
    }
    
    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{
        public View view;
    
        TextView full_name;
    
    
        public ViewHolder(View v) {
            super(v);
            view = v;
    
            full_name = (TextView)view.findViewById(R.id.first_name);
    
            v.setOnClickListener(this);
            v.setOnLongClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            clickListener.onItemClick(getAdapterPosition(), v);
        }
    
        @Override
        public boolean onLongClick(View v) {
            clickListener.onItemLongClick(getAdapterPosition(), v);
            return false;
        }
    }
    
    
    public PersonAdapter(Context context, ArrayList<Person> data) {
        this.context = context;
        this.data = data;
    }
    
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View cardView = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_chatroom_item, parent, false);
        return new ViewHolder(cardView);
    }
    
    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
    
        final Person person = data.get(position);
    
    
    }
    
    @Override
    public int getItemCount() {
        return data.size();
    }
    
    
    }
    

    在你的活动中以这种方式实现它

    PersonAdapter personAdapter = new PersonAdapter(getApplicationContext(),persons);
        personAdapter.setOnItemClickListener(new PersonAdapter.ClickListener() {
            @Override
            public void onItemClick(int position, View v) {
    
            }
    
            @Override
            public void onItemLongClick(int position, View v) {
    
            }
        });
    recyclerView.setAdapter(PersonAdapter);
    

相关问题