简体   繁体   English

如何在Android RecyclerView中获取单击项的文本

[英]How to get the text of clicked item in android recyclerview

I am developing an app displaying list of items containing text and images using volley, fragment and recyclerview. 我正在开发一个应用,使用凌空,片段和recyclerview显示包含文本和图像的项目列表。 The list showing is successfully. 列表显示成功。 But i want to know how to implement for on clicking the product i want to get the name in list (ImageTitleNameView is represnted in my code). 但是我想知道如何在单击产品时实现我想在列表中得到名称的代码(我的代码中代表了ImageTitleNameView)。 The below shows my code. 下面显示了我的代码。

FriendsFragment.java FriendsFragment.java

public class FriendsFragment extends android.support.v4.app.Fragment {



List<GetDataAdapter> GetDataAdapter1;

RecyclerView recyclerView;

RecyclerView.LayoutManager recyclerViewlayoutManager;

RecyclerView.Adapter recyclerViewadapter;

String GET_JSON_DATA_HTTP_URL = "http://192.168.xx.x/1.php";
String JSON_IMAGE_TITLE_NAME = "image_title";
String JSON_IMAGE_URL = "image_url";

JsonArrayRequest jsonArrayRequest ;

RequestQueue requestQueue ;

public FriendsFragment() {
    // Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_friends, container, false);


    GetDataAdapter1 = new ArrayList<>();
    recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview1);
    recyclerView.setHasFixedSize(true);
    recyclerViewlayoutManager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(recyclerViewlayoutManager);






    JSON_DATA_WEB_CALL();



    // Inflate the layout for this fragment
    return rootView;
}

public void JSON_DATA_WEB_CALL(){

    jsonArrayRequest = new JsonArrayRequest(GET_JSON_DATA_HTTP_URL,

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

                    Log.d("LOGTAG", "Response :"+response);

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

                }
            });

    requestQueue = Volley.newRequestQueue(getContext());

    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.setImageTitleNamee(json.getString(JSON_IMAGE_TITLE_NAME));

            GetDataAdapter2.setImageServerUrl(json.getString(JSON_IMAGE_URL));

        } catch (JSONException e) {

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

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

    recyclerView.setAdapter(recyclerViewadapter);

}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}

@Override
public void onDetach() {
    super.onDetach();
}
}

GetDataAdapter.java GetDataAdapter.java

public class GetDataAdapter {

public String ImageServerUrl;
public String ImageTitleName;

public String getImageServerUrl() {
    return ImageServerUrl;
}

public void setImageServerUrl(String imageServerUrl) {
    this.ImageServerUrl = imageServerUrl;
}

public String getImageTitleName() {
    return ImageTitleName;
}

public void setImageTitleNamee(String Imagetitlename) {
    this.ImageTitleName = Imagetitlename;
}

}

SampleHolder.java SampleHolder.java

public class SampleHolder extends RecyclerView.ViewHolder {
public SampleHolder(View itemView) {
    super(itemView);
}
}

RecyclerViewAdapter.java RecyclerViewAdapter.java

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

Context context;

List<GetDataAdapter> getDataAdapter;

ImageLoader imageLoader1;

private final View.OnClickListener mOnClickListener = new MyOnClickListener();


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.recyclerview_items, parent, false);
    v.setOnClickListener(mOnClickListener);
    ViewHolder viewHolder = new ViewHolder(v);

        return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder Viewholder, int position) {

    GetDataAdapter getDataAdapter1 =  getDataAdapter.get(position);

    Viewholder.ImageTitleNameView.setText(getDataAdapter1.getImageTitleName());
    Log.d("LOGTAG", "Name :"+getDataAdapter1.getImageTitleName());

    imageLoader1 = ServerImageParseAdapter.getInstance(context).getImageLoader();

    imageLoader1.get(getDataAdapter1.getImageServerUrl(),
            ImageLoader.getImageListener(
                    Viewholder.networkImageView,//Server Image
                    R.mipmap.ic_launcher,//Before loading server image the default showing image.
                    android.R.drawable.ic_dialog_alert //Error image if requested image dose not found on server.
            )
    );

    Viewholder.networkImageView.setImageUrl(getDataAdapter1.getImageServerUrl(), imageLoader1);

    Viewholder.ImageTitleNameView.setText(getDataAdapter1.getImageTitleName());

}

@Override
public int getItemCount() {

    return getDataAdapter.size();
}

class ViewHolder extends RecyclerView.ViewHolder{



    public TextView ImageTitleNameView;
    public NetworkImageView networkImageView ;

    public ViewHolder(View itemView) {

        super(itemView);

        ImageTitleNameView = (TextView) itemView.findViewById(R.id.textView_item) ;

        networkImageView = (NetworkImageView) itemView.findViewById(R.id.VollyNetworkImageView1) ;

    }
}

private class MyOnClickListener implements View.OnClickListener {

    @Override
    public void onClick(View v) {


        //Log.d("LOGTAG", "clicked : name "+ );

    }
}
}

ServerImageParseAdapter.java ServerImageParseAdapter.java

public class ServerImageParseAdapter {

public static ServerImageParseAdapter SIAdapter;

public static Context context1;

public RequestQueue requestQueue1;

public ImageLoader Imageloader1;

public Cache cache1 ;

public Network networkOBJ ;

LruCache<String, Bitmap> LRUCACHE = new LruCache<String, Bitmap>(30);

private ServerImageParseAdapter(Context context) {

    this.context1 = context;

    this.requestQueue1 = RQ();

    Imageloader1 = new ImageLoader(requestQueue1, new ImageLoader.ImageCache() {

        @Override
        public Bitmap getBitmap(String URL) {

            return LRUCACHE.get(URL);
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {

            LRUCACHE.put(url, bitmap);
        }
    });
}

public ImageLoader getImageLoader() {

    return Imageloader1;
}

public static ServerImageParseAdapter getInstance(Context SynchronizedContext) {

    if (SIAdapter == null) {

        SIAdapter = new ServerImageParseAdapter(SynchronizedContext);
    }
    return SIAdapter;
}

public RequestQueue RQ() {

    if (requestQueue1 == null) {

        cache1 = new DiskBasedCache(context1.getCacheDir());

        networkOBJ = new BasicNetwork(new HurlStack());

        requestQueue1 = new RequestQueue(cache1, networkOBJ);

        requestQueue1.start();
    }
    return requestQueue1;
}
}

i want to know how to implement for on clicking the product i want to get the name in list 我想知道如何实现点击产品的目的,我想在列表中获得名称

Because click listener is set to recyclerview layout and other Views are child View of recyclerview View. 因为单击侦听器设置为recyclerview布局,而其他视图是recyclerview视图的子视图。 parameter of onClick method is instance of The view that was clicked. onClick方法的参数是The view that was clicked.实例The view that was clicked.

Use v to access clicked row TextView data: 使用v访问单击的行TextView数据:

@Override
public void onClick(View v) {
     TextView textView = (TextView) v.findViewById(R.id.textView_item) ;
     Log.d("LOGTAG", "clicked : name "+textView.getText().toString() );
}
class ViewHolder extends RecyclerView.ViewHolder{

    public TextView imageTitleNameView;
    public NetworkImageView networkImageView ;

    public ViewHolder(View itemView) {

        super(itemView);

        imageTitleNameView = (TextView) itemView.findViewById(R.id.textView_item) ;

        networkImageView = (NetworkImageView) itemView.findViewById(R.id.VollyNetworkImageView1) ;

        networkImageView.setOnClickListener(..);
        imageTitleNameView.setOnClickListener(..);

    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM