如何在recyclerview上设置click侦听器并打开静态页面并从json url获取内容

时间:2016-09-26 07:21:11

标签: android json android-recyclerview onitemclicklistener

我在recyclerview中有一系列项目。我想设置点击监听器并打开特定项目的描述页面并从json url设置数据。我已经为描述屏幕和bean类创建了一个适配器。我不知道如何在布局上设置适配器。是否可以在线性布局上设置适配器以显示来自json url的静态内容?

我的代码是:

描述活动

 private class MakeRequestForGetDescription extends AsyncTask<String, Void, String> {

    ProgressDialog Pdialog;
    private String response;
    private MakeServiceClass makeServiceClass = new MakeServiceClass();



    @Override
    protected void onPreExecute() {
        Pdialog = new ProgressDialog(getActivity());
        Pdialog.setMessage("Please Wait..");
        Pdialog.show();
    }

    @Override
    protected String doInBackground(String... params) {
        try {
            HashMap<String, String> parms = new HashMap<String, String>();
            response = makeServiceClass.makeServiceConnectionGet(ConstUrl.DESCRP_URLS);
            Log.e("response ads", response);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return response;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(response);
        if (Pdialog != null) {

            Pdialog.dismiss();
        }

        if (response != null) {
            try {
                JSONObject mainObject = new JSONObject(response);
                if (mainObject.has("status")) {
                    String Status = mainObject.getString("status");
                    String img_url = "";
                    if (Status.equalsIgnoreCase("200")) {
                        if (mainObject.has("img_url")) {
                            img_url = mainObject.getString("img_url");
                            Log.e("img_url", img_url);
                        }

                        if (mainObject.has("details")) {
                            JSONArray datArray = mainObject.getJSONArray("details");
                            descriptionBeanArrayList = new ArrayList<>();
                            if (datArray.length() > 0) {
                                for (int i = 0; i < datArray.length(); i++) {

                                    DescriptionBean descriptionBean = new DescriptionBean();

                                    JSONObject internalDataObject = datArray.getJSONObject(i);

                                    if (internalDataObject.has("id")) {

                                        descriptionBean.setId(internalDataObject.getString("id"));

                                    }
                                    if (internalDataObject.has("title_en")) {

                                        descriptionBean.setTitle_en(internalDataObject.getString("title_en"));

                                    }
                                    if (internalDataObject.has("ad_description_en")) {

                                        descriptionBean.setAd_description_en(internalDataObject.getString("ad_description_en"));

                                    }
                                    if (internalDataObject.has("price")) {

                                        descriptionBean.setPrice(internalDataObject.getString("price"));
                                    }
                                    if (internalDataObject.has("km_driven")) {

                                        descriptionBean.setKm_driven(internalDataObject.getString("km_driven"));
                                    }
                                    if (internalDataObject.has("image_file")) {
                                        descriptionBean.setImage_file("http://" + img_url + internalDataObject.getString("image_file"));

                                    }
                                    descriptionBeanArrayList.add(descriptionBean);

                                }
                                setAdapterForDescription();


                            }
                        }
                    } else {


                    }
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }


        }
    }

    private void setAdapterForDescription() {

        DescriptionAdapter adapter = new DescriptionAdapter(getActivity(), descriptionBeanArrayList);

    }
}

描述适配器

 public View getView(final int position, View convertView, ViewGroup parent) {

    final ViewHolder viewHolder; // view lookup cache stored in tag
    if (convertView == null) {
        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(mContext);
        convertView = inflater.inflate(R.layout.fragment_description, parent,false);

        viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
        viewHolder.tvRate = (TextView) convertView.findViewById(R.id.tvRate);
        viewHolder.tvMiles = (TextView) convertView.findViewById(R.id.tvMiles);
        viewHolder.et_description = (EditText) convertView.findViewById(R.id.et_description);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    //setdata
    viewHolder.tvTitle.setText(descriptionBeanArrayList.get(position).getTitle_en());
    viewHolder.tvRate.setText(descriptionBeanArrayList.get(position).getPrice());
    viewHolder.tvMiles.setText(descriptionBeanArrayList.get(position).getKm_driven());
    viewHolder.et_description.setText(descriptionBeanArrayList.get(position).getAd_description_en());

    Log.e("s", descriptionBeanArrayList.get(position).getImage_file());
    //Glide.with(mContext).load("www.apnikheti.com/upload/buysell/idea99A4.jpg").into(viewHolder.iv_picofproduct);

    Picasso.with(mContext).load(descriptionBeanArrayList.get(position).getImage_file()).into(viewHolder.iv_picofproduct, new Callback() {
        @Override
        public void onSuccess() {
            Log.e("s", "sucess");
        }

        @Override
        public void onError() {
            Log.e("s", "failed");

        }
    });
    Picasso.with(mContext).setLoggingEnabled(true);
    return convertView;
}

public class ViewHolder {
    private TextView tvTitle,tvRate,tvMiles;
    private EditText et_description;
    public ImageView iv_picofproduct;
}

}

1 个答案:

答案 0 :(得分:0)

这是我的代码,用于从url(Json Data)检索数据,并使用适配器将其加载到recyclerview中,并将相同的值传递给另一个活动。

MyActivity

  public class Video_List extends AppCompatActivity {
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private RecyclerView.Adapter adapter;
    //private GridLayoutManager layoutManager;
    private List<Video_Details> videodetails;
    public static final String VideoID = "v_id";
    public static final String ID = "id";
    public static final String Title = "title";
    public static final String Thumb = "thumb";
    public static final String url = "http://115.115.122.10/paul/api/videos.php?start=1&count=10";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video__list);
        getdata();
        recyclerView = (RecyclerView) findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        //layoutManager = new GridLayoutManager(this,2);
        recyclerView.setLayoutManager(layoutManager);
        videodetails = new ArrayList<>();



    }
    private void getdata(){
        final ProgressDialog loading = ProgressDialog.show(this,"Loading Data", "Please wait...",false,false);

        final JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        //Dismissing progress dialog
                        loading.dismiss();
                        Log.d("count",response.toString());
                        //calling method to parse json array
                        parseData(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                        loading.dismiss();

                        Log.d("infoz","777"+error.getMessage());

                        Toast.makeText(getApplicationContext(),"No data Found",Toast.LENGTH_LONG).show();


                    }
                });

        //Creating request queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        //Adding request to the queue
        requestQueue.add(jsonArrayRequest);
    }

    //This method will parse json data
    private void parseData(JSONArray array){

        try {

            for (int i = 0; i < array.length(); i++) {

                JSONObject json = array.getJSONObject(i);

                Video_Details video = new Video_Details();

                if (json.has(VideoID)) {
                    Log.d("has values", json.getString(VideoID));
                }
                video.setId(json.getString(ID));
                video.setV_id(json.getString(VideoID));
                video.setTitle(json.getString(Title));
                video.setThumb(json.getString(VideoID));
                videodetails.add(video);

                if (json.has(VideoID))
                {
                    Log.d("Video",VideoID);
                }
            }


        } catch (Exception e) {
            e.printStackTrace();
        }



        //Finally initializing our adapter
        adapter = new DataAdapter(videodetails, this);

        //Adding adapter to recyclerview
        recyclerView.setAdapter(adapter);



    }



}

MyAdapter

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private Context context;
List<Video_Details> video;

public DataAdapter(List<Video_Details> video, Context context) {
    super();
    this.context = context;
    this.video = video;
}

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

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    final Video_Details videoDetails =  video.get(position);
    String url;
    final String VideoID;

    holder.title.setText(video.get(position).getTitle());

    VideoID= video.get(position).getV_id();
    url = video.get(position).getThumb();

     Glide.with(context)
             .load(url)
             .override(150,70)
             .into(holder.thumb);
   //viewHolder.thumb.setText(android.get(i).getVer());
  //  viewHolder.tv_api_level.setText(android.get(i).getApi());

    holder.vm.setOnClickListener(new View.OnClickListener() {
                                     @Override
                                     public void onClick(View v) {
                                         Toast.makeText(v.getContext(), "You Clicked"+video.get(position).getV_id(), Toast.LENGTH_SHORT).show();
                                         Intent intent = new Intent(v.getContext(),Play_Video.class);
                                         intent.putExtra("VideoId",(video.get(position).getV_id()));
                                         intent.putExtra("Title",(video.get(position).getTitle()));
                                         v.getContext().startActivity(intent);


                                     }
                                 }

    );
}

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




public class ViewHolder extends RecyclerView.ViewHolder{
    public TextView title;
    public ImageView thumb;
    public String videoid;
    public View vm;
    public ViewHolder(View view) {
        super(view);
        vm = view;
        title = (TextView)view.findViewById(R.id.title);
        thumb = (ImageView) view.findViewById(R.id.thumb);



        //tv_version = (TextView)view.findViewById(R.id.tv_version);
        //tv_api_level = (TextView)view.findViewById(R.id.tv_api_level);

    }
}

}