点击获取recyclerview位置并传递对象

编程入门 行业动态 更新时间:2024-10-17 07:30:59
本文介绍了点击获取recyclerview位置并传递对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

伙计们,我真的需要你们的帮助,我被困住了.简而言之,我制作了 recyclerview 来显示我解析的 json 数据.我所困扰的是如何获得 recyclerview 位置并将 json 对象传递给新的活动槽意图.这是我的代码,所以你可以看到发生了什么.主要活动:

I really need your help here guys, i'm stuck. In short i have made recyclerview to show my parsed json data. What i'm stuck at is on how to get recyclerview position and pass json object to new activity trough intent. Here is my code so you can see whats going on. MainActivity:

public class MainActivity extends AppCompatActivity implements SearchView.OnQueryTextListener { ArrayList<Item> end = new ArrayList<Item>(); RecyclerView recyclerView; Adapter adapter; List<Item> mModels; Context context = this; @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelableArrayList("KEY2", end); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // View view = LayoutInflater.from(this).inflate(R.layout.activity_main, null, false); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.RecylerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); adapter = new Adapter(this); recyclerView.setAdapter(adapter); if (isAvailable() && savedInstanceState == null) //Check if network is available { jsonreq(); } else if (savedInstanceState != null) { end = savedInstanceState.getParcelableArrayList("KEY2"); adapter.list(end); } else { Toast.makeText(this, "Molimo, ukljucite internet.", Toast.LENGTH_LONG).show(); } } private boolean isAvailable() { ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = manager.getActiveNetworkInfo(); Boolean isAvail = false; if (networkInfo != null && networkInfo.isConnected()) { isAvail = true; } return isAvail; } public void jsonreq() { String url = "www.json-generator/api/json/get/cfOhbHcpki?indent=2"; RequestQueue requestQueue = VolleySingelton.getrequestQueue(); JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { end = getdata(response); adapter.list(end); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); requestQueue.add(request); } private ArrayList<Item> getdata(JSONObject response) { ArrayList<Item> listy = new ArrayList<Item>(); try { JSONArray array = response.getJSONArray("items"); for (int i = 0; i < array.length(); i++) { JSONObject object1 = array.getJSONObject(i); String content = object1.getString("caption"); String url = object1.getString("url"); String proba = object1.getString("proba"); // ImageView image = process(url,imageView); Item I = new Item(content, url, proba); listy.add(I); } } catch (JSONException e) { e.printStackTrace(); Toast.makeText(this, "Error" + e, Toast.LENGTH_LONG).show(); } Log.d("mohak", "" + response.length()); return listy; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem menuItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem); SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); searchView.setIconifiedByDefault(true); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return true; // handled } @Override public boolean onQueryTextChange(String newText) { adapter.getFilter().filter(newText); return true; } }); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar Item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { return false; }

这是适配器:

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> implements Filterable{ public static final String LIST_DETAIL_KEY = "list"; public Item item; private LayoutInflater inflater; Context context; ArrayList<Item> fin = new ArrayList<Item>(); Adapter(Context context) { inflater = LayoutInflater.from(context); this.context = context; } public void list(ArrayList<Item> fin) { this.fin = fin; Search search = new Search(fin); notifyItemRangeChanged(0, fin.size()); } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = inflater.inflate(R.layout.rac, viewGroup, false); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); } @Override public void onBindViewHolder(ViewHolder viewHolder, int i) { Item current = fin.get(i); viewHolder.content.setText(current.content); viewHolder.proba.setText(current.proba); // Uri uri = Uri.parse(current.url); // Context context = viewHolder.imageView.getContext(); Picasso.with(context).load(current.url).into(viewHolder.imageView); } @Override public int getItemCount() { return fin.size(); } @Override public Filter getFilter() { Search search = new Search(fin); return search; } class ViewHolder extends RecyclerView.ViewHolder { TextView content; TextView proba; ImageView imageView; public ViewHolder(View itemView) { super(itemView); content = (TextView) itemView.findViewById(R.id.textView); proba = (TextView) itemView.findViewById(R.id.textView2); imageView = (ImageView) itemView.findViewById(R.id.imageView); } } }

先谢谢你.

推荐答案

我们处理点击事件,我尝试了下面的方法创建接口 RecyclerOnItemClickListener

We handling the click events, I have tried below method Create an interface RecyclerOnItemClickListener

import android.view.View; /** * A click listener for items. */ public interface RecyclerOnItemClickListener { /** * Called when an item is clicked. * * @param childView View of the item that was clicked. * @param position Position of the item that was clicked. */ public void onItemClick(View childView, int position); }

在adapter类中,可以取调用Activity/Fragment中实现的RecyclerOnItemClickListener对象

In the adapter class, you can take the RecyclerOnItemClickListener object which is implemented in the calling Activity/Fragment

RecyclerOnItemClickListener mItemClickListener;

然后您可以在适配器的构造函数中初始化该变量

You can then initialize that variable in the constructor of the adapter

mItemClickListener = recyclerOnItemClickListener;

Activity/Fragment 实现了 RecyclerOnItemClickListener 接口,因此它将实现 onItemClick 方法.你可以在这里写下一个活动中传递数据的代码

The activity/Fragment implements the RecyclerOnItemClickListener interface, so it will have onItemClick method implemented. You can write the code for passing data in the next activity here

@Override public void onItemClick(View childView, int position) { Intent intent = new Intent(getActivity(), NextActivity.class); intent.putExtra("ITEM", mModels.get(position)); startActivity(intent); }

在适配器类中,您将需要初始化ViewHolder类,如下所示:

In the adapter class, you will need to initialize the ViewHolder class as shown below:

class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView content; TextView proba; ImageView imageView; public ViewHolder(View itemView) { super(itemView); content = (TextView) itemView.findViewById(R.id.textView); proba = (TextView) itemView.findViewById(R.id.textView2); imageView = (ImageView) itemView.findViewById(R.id.imageView); } @Override public void onClick(View v) { if (mItemClickListener != null) { mItemClickListener.onItemClick(v, getPosition()); } } }

希望对你有帮助..

更多推荐

点击获取recyclerview位置并传递对象

本文发布于:2023-10-08 01:20:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1471095.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对象   位置   recyclerview

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!