RecyclerView实现中的onClickListener

时间:2017-10-22 18:18:45

标签: java android

我是Android新手,我制作了一个recyclerview,它打印列表并且工作,我想在列表元素上实现onClickListener,当我点击时我试图将文本发送到新的Intent但是徒劳无功。有人可以帮助我提供他们的专业知识,这可能很简单,但我正在努力学习并在Android上做得更好,如果有人计划对此投票,请先评论并让我知道,这样我至少可以尝试用你的建议解决问题。

以下是Code&屏幕截图。

以下是我的观点,当我点击列表项时,我想获取该列表项screenshot

上的文本
  

MainActivity.java

package com.fayazahmed.ifscdb;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    List<GetDataAdapter> GetDataAdapter1;
    RecyclerView recyclerView;
    RecyclerView.LayoutManager recyclerViewlayoutManager;
    RecyclerView.Adapter recyclerViewadapter;
    ProgressBar progressBar;
    String GET_JSON_DATA_HTTP_URL = "http://myTestapi.php";
    String JSON_BANK_NAME = "BANK";
    JsonArrayRequest jsonArrayRequest ;
    RequestQueue requestQueue ;
    View ChildView ;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        GetDataAdapter1 = new ArrayList<>();

        recyclerView = (RecyclerView) findViewById(R.id.recyclerView1);

        progressBar = (ProgressBar) findViewById(R.id.progressBar1);

        recyclerView.setHasFixedSize(true);

        recyclerViewlayoutManager = new LinearLayoutManager(this);

        recyclerView.setLayoutManager(recyclerViewlayoutManager);

        JSON_DATA_WEB_CALL();

    }

    public void JSON_DATA_WEB_CALL(){

        progressBar.setVisibility(View.VISIBLE);

        jsonArrayRequest = new JsonArrayRequest(GET_JSON_DATA_HTTP_URL,

                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {

                        progressBar.setVisibility(View.GONE);

                        JSON_PARSE_DATA_AFTER_WEBCALL(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

        requestQueue = Volley.newRequestQueue(this);

        requestQueue.add(jsonArrayRequest);
    }

    public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array){

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

            GetDataAdapter GetDataAdapter2 = new GetDataAdapter();

            JSONObject json = null;
            try {
                json = array.getJSONObject(i);

                GetDataAdapter2.setBankName(json.getString(JSON_BANK_NAME));

            } catch (JSONException e) {

                e.printStackTrace();
            }
            GetDataAdapter1.add(GetDataAdapter2);
        }

        recyclerViewadapter = new RecyclerViewAdapter(GetDataAdapter1, this);

        recyclerView.setAdapter(recyclerViewadapter);
    }

}
  

RecyclerViewAdapter.java

package com.fayazahmed.ifscdb;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;



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

    Context context;
    List<GetDataAdapter> getDataAdapter;

    public RecyclerViewAdapter(List<GetDataAdapter> getDataAdapter, Context context){
        super();
        this.getDataAdapter = getDataAdapter;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false);

        ViewHolder viewHolder = new ViewHolder(v);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

        GetDataAdapter getDataAdapter1 =  getDataAdapter.get(position);

        holder.IdTextView.setText(String.valueOf(getDataAdapter1.getBankName()));

    }

    @Override
    public int getItemCount() {

        return getDataAdapter.size();
    }


    class ViewHolder extends RecyclerView.ViewHolder{

        public TextView IdTextView;



        public ViewHolder(View itemView) {

            super(itemView);

            IdTextView = (TextView) itemView.findViewById(R.id.TextViewCard) ;

        }
    }

}

1 个答案:

答案 0 :(得分:0)

你去吧

只需在您的查看器上实现点击监听器,然后对您的主要活动执行回调。

<强>回调

public interface OnClickViewItemListener {

        void onClickViewItem(View view, int position);

    }

<强>适配器

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

    Context context;
    List<GetDataAdapter> getDataAdapter;
    private OnClickViewItemListener mItemListener;

    public RecyclerViewAdapter(List<GetDataAdapter> getDataAdapter, Context context,OnClickViewItemListener mItemListener){
        super();
        this.getDataAdapter = getDataAdapter;
        this.context = context;
        this.mItemListener = mItemListener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false);

        ViewHolder viewHolder = new ViewHolder(v);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

        GetDataAdapter getDataAdapter1 =  getDataAdapter.get(position);

        holder.IdTextView.setText(String.valueOf(getDataAdapter1.getBankName()));

    }

    @Override
    public int getItemCount() {

        return getDataAdapter.size();
    }

     public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
            public TextView IdTextView;
            public ViewHolder(View itemView) {
                super(itemView);
                IdTextView = (TextView) itemView.findViewById(R.id.TextViewCard) ;
                itemView.setOnClickListener(this);
            }

            @Override
            public void onClick(View v) {
                //perform your action here or get a callback on calling view (activity/fragment) and perform action there.
                mItemListener.onClickViewItem(v,getAdapterPosition());
            }
}

如果您选择获取mainactivity回调,请按照

进行操作

mainactivity 应实现点击监听器

public class MainActivity extends AppCompatActivity implements  OnClickViewItemListener {
        List<GetDataAdapter> GetDataAdapter1;
RecyclerView recyclerView;
RecyclerView.LayoutManager recyclerViewlayoutManager;
RecyclerView.Adapter recyclerViewadapter;
ProgressBar progressBar;
String GET_JSON_DATA_HTTP_URL = "http://myTestapi.php";
String JSON_BANK_NAME = "BANK";
JsonArrayRequest jsonArrayRequest ;
RequestQueue requestQueue ;
View ChildView ;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    GetDataAdapter1 = new ArrayList<>();

    recyclerView = (RecyclerView) findViewById(R.id.recyclerView1);

    progressBar = (ProgressBar) findViewById(R.id.progressBar1);

    recyclerView.setHasFixedSize(true);

    recyclerViewlayoutManager = new LinearLayoutManager(this);

    recyclerView.setLayoutManager(recyclerViewlayoutManager);

    JSON_DATA_WEB_CALL();

}

public void JSON_DATA_WEB_CALL(){

    progressBar.setVisibility(View.VISIBLE);

    jsonArrayRequest = new JsonArrayRequest(GET_JSON_DATA_HTTP_URL,

            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    progressBar.setVisibility(View.GONE);

                    JSON_PARSE_DATA_AFTER_WEBCALL(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });

    requestQueue = Volley.newRequestQueue(this);

    requestQueue.add(jsonArrayRequest);
}

public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array){

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

        GetDataAdapter GetDataAdapter2 = new GetDataAdapter();

        JSONObject json = null;
        try {
            json = array.getJSONObject(i);

            GetDataAdapter2.setBankName(json.getString(JSON_BANK_NAME));

        } catch (JSONException e) {

            e.printStackTrace();
        }
        GetDataAdapter1.add(GetDataAdapter2);
    }

    recyclerViewadapter = new RecyclerViewAdapter(GetDataAdapter1, this,this);

    recyclerView.setAdapter(recyclerViewadapter);
}


        @Override
        public void onClickViewItem(View view, int position) {
            //here handle the item click listener

        }
    }