Android 如何将点击功能添加到回收器视图?
这是我在Myviewholder中添加onclicklistener的适配器。我想在卡片视图上执行onclick功能,获取被单击卡片的位置,并使用intent将所选卡片的值发送给其他活动。请帮我完成下面我给出的适配器和片段Android 如何将点击功能添加到回收器视图?,android,android-intent,android-recyclerview,Android,Android Intent,Android Recyclerview,这是我在Myviewholder中添加onclicklistener的适配器。我想在卡片视图上执行onclick功能,获取被单击卡片的位置,并使用intent将所选卡片的值发送给其他活动。请帮我完成下面我给出的适配器和片段 private LayoutInflater inflater; private ArrayList<Books> dataModelArrayList; private OnItemClickListener onItemClickListener; priv
private LayoutInflater inflater;
private ArrayList<Books> dataModelArrayList;
private OnItemClickListener onItemClickListener;
private Context ctx;
String url = "https://test1.xz.com/pub/media/wysiwyg/";
public MyRecyclerAdapter(Context ctx, ArrayList<Books> dataModelArrayList){
inflater = LayoutInflater.from(ctx);
this.dataModelArrayList = dataModelArrayList;
}
@Override
public MyRecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.singleitem_recyclerview, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyRecyclerAdapter.MyViewHolder holder, int position) {
if (dataModelArrayList.get(position).getImage().isEmpty()) {
Picasso.get().load(R.drawable.placeholder)
.placeholder(R.drawable.placeholder)
.error(R.drawable.placeholder)
.into(holder.iv);
}else{Picasso.get().load(url + dataModelArrayList.get(position).getImage()).into(holder.iv);}
holder.name.setText(dataModelArrayList.get(position).getBookFullName());
}
@Override
public int getItemCount() {
return dataModelArrayList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder implements
View.OnClickListener{
TextView name;
ImageView iv;
public MyViewHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
iv = (ImageView) itemView.findViewById(R.id.iv);
}
@Override
public void onClick(View v) {
onItemClickListener.onItemClick(dataModelArrayList);
}
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public interface OnItemClickListener {
void onItemClick(ArrayList<Books> Books);
}
私人充气机;
私有ArrayList dataModelArrayList;
私有OnItemClickListener OnItemClickListener;
私有上下文ctx;
字符串url=”https://test1.xz.com/pub/media/wysiwyg/";
公共MyRecyclerAdapter(上下文ctx、ArrayList dataModelArrayList){
充气机=从(ctx)开始的充气机;
this.dataModelArrayList=dataModelArrayList;
}
@凌驾
公共MyRecyclerAdapter.MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=充气机。充气(R.layout.singleitem\u recyclerview,parent,false);
MyViewHolder=新的MyViewHolder(视图);
报税表持有人;
}
@凌驾
BindViewHolder上的公共无效(MyRecyclerAdapter.MyViewHolder,int位置){
if(dataModelArrayList.get(position).getImage().isEmpty()){
毕加索.get().load(R.drawable.placeholder)
.placeholder(R.drawable.placeholder)
.错误(R.drawable.placeholder)
.转入(持有人iv);
}else{Picasso.get().load(url+dataModelArrayList.get(position.getImage()).into(holder.iv);}
holder.name.setText(dataModelArrayList.get(position.getBookFullName());
}
@凌驾
public int getItemCount(){
返回dataModelArrayList.size();
}
类MyViewHolder扩展了RecyclerView.ViewHolder实现
View.OnClickListener{
文本视图名称;
ImageView iv;
公共MyViewHolder(查看项目视图){
超级(项目视图);
name=(TextView)itemView.findViewById(R.id.name);
iv=(ImageView)itemView.findViewById(R.id.iv);
}
@凌驾
公共void onClick(视图v){
onItemClickListener.onItemClick(dataModelArrayList);
}
}
公共无效setOnItemClickListener(OnItemClickListener OnItemClickListener){
this.onItemClickListener=onItemClickListener;
}
公共接口侦听器{
void onItemClick(ArrayList图书);
}
下面给出的代码是我在setupRecycler()方法中使用上面给定适配器的片段oncreateview。我正在设置适配器,但无法获得单击功能
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_home, container, false);
recyclerView = view.findViewById(R.id.recycler);
fetchingJSON();
return view;
}
private void fetchingJSON() {
showSimpleProgressDialog(getActivity(), "Loading...","Loading",false);
StringRequest stringRequest = new StringRequest(Request.Method.GET, URLs.URL_BOOKS,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("response", ">>" + response);
try {
removeSimpleProgressDialog();
JSONObject obj = new JSONObject(response);
if(obj.optString("status_code").equals("200")){
dataModelArrayList = new ArrayList<>();
JSONArray dataArray = obj.getJSONArray("data");
for (int i = 0; i < dataArray.length(); i++) {
Books playerModel = new Books();
JSONObject dataobj = dataArray.getJSONObject(i);
playerModel.setImage(dataobj.getString("Image"));
playerModel.setBookFullName(dataobj.getString("BookFullName"));
dataModelArrayList.add(playerModel);
}
setupRecycler();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//displaying the error in toast if occurrs
Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
// request queue
RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
requestQueue.add(stringRequest);
}
private void setupRecycler(){
rvAdapter= new MyRecyclerAdapter(getActivity().getApplicationContext(), dataModelArrayList);
recyclerView.setAdapter(rvAdapter);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), getResources().getInteger(R.integer.number_of_grid_items)));
rvAdapter.setOnItemClickListener(new MyRecyclerAdapter.OnItemClickListener() {
@Override
public void onItemClick(ArrayList<Books> Books) {
//Toast.makeText(getActivity(), "lakshman", Toast.LENGTH_LONG).show();
Toast.makeText(getActivity(), Books.getBookFullName(), Toast.LENGTH_LONG).show();
}
/*@Override
public void onItemClick(Books Books) {
Toast.makeText(getActivity(), Books.getBookFullName(), Toast.LENGTH_LONG).show();
}*/
});
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u home,container,false);
recyclerView=view.findViewById(R.id.recycler);
fetchingJSON();
返回视图;
}
私有void fetchingJSON(){
showSimpleProgressDialog(getActivity(),“加载…”,“加载”,false);
StringRequest StringRequest=新建StringRequest(Request.Method.GET,URL.URL\u BOOKS,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
Log.d(“响应”、“>>”+响应);
试一试{
removeSimpleProgressDialog();
JSONObject obj=新的JSONObject(响应);
如果(对象OPT字符串(“状态代码”)等于(“200”){
dataModelArrayList=新建ArrayList();
JSONArray dataArray=obj.getJSONArray(“数据”);
对于(int i=0;i
我如何获取被单击的卡的位置并将特定值传递给其他活动
请帮我解决这个问题。将下面的方法放入
onBindViewHolder
中
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (viewItemInterface != null) {
viewItemInterface.onItemClick(holder.getAdapterPosition(), bgImage.getCompressedImg());
}
}
});
您忘了在您的
MyViewHolder中抵制OnClickListener
name.setOnClickListener(this);
iv.setOnClickListener(this);
您需要在MyViewHolder()中设置OnClickListener
,如下所示
public MyViewHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
iv = (ImageView) itemView.findViewById(R.id.iv);
name.setOnClickListener(this);
iv.setOnClickListener(this);
}