当前位置: 首页 > 知识库问答 >
问题:

RecyclerView得OnItemClickListener[重复]

劳鹏云
2023-03-14

我想将“项目单击侦听器”添加到我的RecyclerView中,这样当我单击某个项目时,它将启动一个新的Intent并从web服务器检索有关该项目的数据。我试过很多建议,但没有一个有用。

我的RecylerView类

public class GetPrice extends AppCompatActivity {
private RecyclerView recyclerView;
private GridLayoutManager gridLayoutManager;
private  CustomAdapter adapter;
private List<MyData> dataList;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.getpricerecycle);
    recyclerView =(RecyclerView) findViewById(R.id.recycler_view);

    dataList = new ArrayList<>();
    load_data_from_server(0);
    gridLayoutManager = new GridLayoutManager(this,1);
    recyclerView.setLayoutManager(gridLayoutManager);
    adapter = new CustomAdapter(this,dataList);
    recyclerView.setAdapter(adapter);

}

private void load_data_from_server(final int id) {
    AsyncTask<Integer,Void,Void> task = new AsyncTask<Integer, Void, Void>() {
        @Override
        protected Void doInBackground(Integer... params) {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder().url("http://172.20.10.7/anfal/getPrice.php?id="+id).build();
            try {
                Response response = client.newCall(request).execute();
                JSONArray array = new JSONArray(response.body().string());
                for(int i=0;i<array.length();i++ ){
                    JSONObject jsonobject = array.getJSONObject(i);
                    MyData data=new MyData(jsonobject.getInt("id"),jsonobject.getString("name"),jsonobject.getString("price"),jsonobject.getString("image"));
                    dataList.add(data);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                System.out.println("End Of Content");
            }


            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            adapter.notifyDataSetChanged();
        }
    };
task.execute(id);

}
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {                                                                 
        private Context context;
        private List<MyData> my_data;
        public CustomAdapter(Context context, List<MyData> my_data) {
        this.context = context;
        this.my_data = my_data;
    }

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

    }
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
           holder.name.setText(my_data.get(position).getName());
           holder.price.setText(my_data.get(position).getPrice());


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

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView name;
        public TextView price;
        public ImageView imageview;
        public ViewHolder(View itemView) {
            super(itemView);
            name=(TextView)itemView.findViewById(R.id.description);
            price=(TextView) itemView.findViewById(R.id.nameofp);
            imageview=(ImageView) itemView.findViewById(R.id.imgevie);
        }
    }

}

共有1个答案

钮誉
2023-03-14

实现recyclerview的项单击的最简单方法是在适配器的OnBindViewWholder方法中实现。

@Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
       vh.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //use position value  to get clicked data from list
            }
        });
    }
 类似资料:
  • 问题内容: 我正在 RecyclerView上* 工作,并尝试使用 Interface来 对recyclcerview的每个项目使用点击监听器 * 这是我的活动课: 这是我的适配器类 最后我将这个接口用于侦听器: 此过程可以正常运行我的应用程序的所有其他部分,但不适用于这种情况。我不知道问题出在哪里。请帮我 。 问题答案: 您这种方法:

  • 问题内容: 我正在探索,惊讶地发现那没有。 我有两个问题。 主要问题 我想知道为什么删除了? 是否存在性能问题或其他问题? 次要问题 我解决我的问题写我的: 这样可以/有更好的方法吗? 问题答案:

  • 所以,经过5个月的Web开发,我需要重新使用android,但我发现我的一些旧代码已经不能工作了。我有一个带有数据适配器的RecyclerView,但项目的onClickListener没有任何响应。这是我的代码的样子: ProjectsActivity.java 列表显示出来,点击不起作用,甚至连到控制台的日志都没有。有人知道我做错了什么吗?我使用SDKV23作为编译SDK版本。我的SDK最低版

  • 我正在尝试创建一个ListView,它的每一行都是一个水平滚动列表。早些时候,我使用的是HorizontalScrollView,但我需要一个可以回收视图的布局。所以我使用了RecyclerView,但是现在RecyclerView的内容不可见了。 下面是我的垂直ListView适配器: 下面是我的水平回收视图适配器: 下面是ListView行的布局: 当我使用HorizontalScrollVi

  • 问题内容: 我有一个自定义我在我农具。 问题是该方法从未调用过。我想我需要在我的主适配器而不是自定义适配器中实现它。 MyListViewAdapter.java : 我对吗? 问题答案: 为什么在适配器内部会有OnItemClickListener?您可能在Adapter内有OnClickListener,或者最佳实践是将OnItemClickListener设置为ListView或您在活动/片

  • 本文向大家介绍Android ListView的OnItemClickListener详解,包括了Android ListView的OnItemClickListener详解的使用技巧和注意事项,需要的朋友参考一下 我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener。本文主要在于对