RecyclerView 的 OnItemClickListener

Ome*_*lid 0 android android-recyclerview

我想在我的项目上添加点击监听器,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);

}
Run Code Online (Sandbox Code Playgroud)

这是我的回收站视图的 coustm 适配器

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);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Pat*_*k R 5

实现recyclerview的item点击最简单的方法就是在adapter的onBindViewHolder方法中实现。

@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
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)