[英]how to give onclick in recyclerview to get values to another activity from mysql
當我想獲取我創建的 Recyclerview 的 ID 時,我遇到了問題。 所以后面Recyclerview在點擊的時候,會根據點擊的ID出現詳情。 對於我存儲在 MySQL 中的數據,我的邏輯有困難。 謝謝
這是 MainActivity.java `public class MainActivity 擴展 AppCompatActivity {
private RecyclerView lvhape;
private RequestQueue requestQueue;
private StringRequest stringRequest;
ArrayList<HashMap<String, String>> list_data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String url = "http://192.168.43.77/app_blogvolley/getdata.php";
lvhape = (RecyclerView) findViewById(R.id.lvhape);
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
lvhape.setLayoutManager(llm);
requestQueue = Volley.newRequestQueue(MainActivity.this);
list_data = new ArrayList<HashMap<String, String>>();
stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("response ", response);
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("handphone");
for (int a = 0; a < jsonArray.length(); a++) {
JSONObject json = jsonArray.getJSONObject(a);
HashMap<String, String> map = new HashMap<String, String>();
map.put("id", json.getString("idhp"));
map.put("merk", json.getString("merk"));
map.put("tipe", json.getString("tipe"));
map.put("gambar", json.getString("gambar"));
map.put("keterangan", json.getString("keterangan"));
list_data.add(map);
AdapterList adapter = new AdapterList(MainActivity.this, list_data);
lvhape.setAdapter(adapter);
lvhape.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
GestureDetector gestureDetector = new GestureDetector(getApplicationContext(), new GestureDetector.SimpleOnGestureListener() {
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null && gestureDetector.onTouchEvent(e)) {
int position = rv.getChildAdapterPosition(child);
Intent i = new Intent(getApplicationContext(), DetailKate1.class);
i.putExtra("id", list_data.get(position).get("id"));
startActivity(i);
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
requestQueue.add(stringRequest);
}
}`
AdapterList.java
`public class AdapterList extends RecyclerView.Adapter<AdapterList.ViewHolder>{
Context context;
ArrayList<HashMap<String, String>> list_data;
public AdapterList(MainActivity mainActivity, ArrayList<HashMap<String, String>> list_data) {
this.context = mainActivity;
this.list_data = list_data;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Glide.with(context)
.load("http://192.168.43.77/app_blogvolley/img/" + list_data.get(position).get("gambar"))
.crossFade()
.placeholder(R.mipmap.ic_launcher)
.into(holder.imghape);
holder.txthape.setText(list_data.get(position).get("merk"));
holder.txtmerk.setText(list_data.get(position).get("tipe"));
}
@Override
public int getItemCount() {
return list_data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView txthape;
TextView txtmerk;
ImageView imghape;
public ViewHolder(View itemView) {
super(itemView);
txthape = (TextView) itemView.findViewById(R.id.txthape);
txtmerk = (TextView) itemView.findViewById(R.id.txtmerk);
imghape = (ImageView) itemView.findViewById(R.id.imghp);
}
}
} `
DetailKate1.java(作為點擊回收站時的新活動)
`public class DetailKate1 extends AppCompatActivity {
public TextView txtTitle;
ArrayList<HashMap<String, String>> list_data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail_kate1);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
txtTitle = (TextView) findViewById(R.id.txtTitle);
txtTitle.setText(getIntent().getStringExtra("id"));
}
} `
在RecyclerView
中實現listener
器的方法有很多,最常見的方法是擁有一個interface
並將其用作適配器上的偵聽器來檢索當前單擊的項目。
你可以有類似的東西
interface ItemListener { public <HashMap<String, String> onClick(<HashMap<String, String> item); }
您可以在構造函數上傳遞它的實現,將其保存為屬性,然后在onBindViewHolder
中實現它,例如
holder.itemView.setOnClickListener({ listener.onClick(list_data.get(position)); })
然后在你的Activity中,你只需要實現這個接口,你就可以點擊當前的item,獲取id
沒有問題!
我希望這可以幫助你解決這個問題:)
也許你可以試試這個,它會讓你點擊項目並發送 id。 將此添加到您的 onBindViewHolder
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Glide.with(context)
.load("http://192.168.43.77/app_blogvolley/img/" + list_data.get(position).get("gambar"))
.crossFade()
.placeholder(R.mipmap.ic_launcher)
.into(holder.imghape);
holder.txthape.setText(list_data.get(position).get("merk"));
holder.txtmerk.setText(list_data.get(position).get("tipe"));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, DetailKate1.class);
intent.putExtra("id", list_data.get(position).get("id"));
context.startActivity(intent);
}
});
}
然后您的 DetailKate1 class 將使用
txtTitle.setText(getIntent().getStringExtra("id"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.