今天來做recyclerview的點擊事件,昨天是建立出RecyclerView列表,今天來做點擊之後的跳轉頁面事件,以及判斷點擊的RecyclerView欄位是哪一欄的資料。
前面部分與昨天那篇相同,只需要在onBindViewHolder
裡面新增點擊事件就可以了。
下面就是點擊事件的建立寫法,會發現與一般在Activity的點擊事件不同,這是在Adapter建立的點擊事件,因為沒有指定View所以不知道是在哪裡,因此不能直接使用原本的點擊事件寫法。
這邊就需要我們在onBindViewHolder
裡面建立,在我們建立完成之後他有一個holder
的變數可以用,而這個型態是ListAdapter.ViewHolder
,也就是前面已經建立好的ViewHolder
。
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//執行事件
}
});
holder.itemView.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick (View view) {
Intent intent = new Intent ();
intent.setClass (view.getContext (),MainActivity2.class);
view.getContext ().startActivity (intent);
}
});
ShopIDnum
的型態在ViewHolder
中,我是使用String型態進行設定。
holder.itemView.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick (View view) {
Bundle bundle =new Bundle ();
Intent intent = new Intent ();
holder.ShopIDnum = holder.tvname.getText ().toString ();
bundle.putString ("Shop_IDnum",holder.ShopIDnum);
intent.putExtras (bundle);
intent.setClass (view.getContext (),MainActivity2.class);
view.getContext ().startActivity (intent);
}
});
public class MainActivity2 extends AppCompatActivity {
String shopIDnum;
TextView shopID;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main2);
shopID = findViewById (R.id.shopIDnum);
//接收的撰寫方式
Bundle bundle = getIntent ().getExtras ();
//將自己定義的Key放入就可以將資料放入此頁所定義的String變數裡面存放。
shopIDnum = bundle.getString ("Shop_IDnum");
//直接強制寫入並更改成對應資料。
shopID.setText (shopIDnum);
}
}
附圖:
點擊對應欄位所代表的資料,就會顯示所點擊欄位的資料。(使用橫向截圖以方便版面檢視)
會這麼做的原因是想測試自己所點擊的RecyclerView欄位是哪一個欄位。
package com.example.recyclerview002;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> {
ArrayList<HashMap<String ,String>> arrayList = new ArrayList<>();
class ViewHolder extends RecyclerView.ViewHolder{
private TextView tvname,tvdate,tvtime,tvrewardpoint;
private String ShopIDnum;
public ViewHolder(@NonNull View itemView) {
super(itemView);
tvname = itemView.findViewById(R.id.textView);
tvdate = itemView.findViewById(R.id.textView2);
tvtime = itemView.findViewById(R.id.textView3);
tvrewardpoint = itemView.findViewById(R.id.textView4);
}
public void itemView(HashMap<String, String> stringStringHashMap) {
}
}
@NonNull
@Override
public ListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.listitem,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ListAdapter.ViewHolder holder, int position) {
holder.tvname.setText(arrayList.get(position).get("name_infomation"));
holder.tvdate.setText("YYYY/MM/DD");
holder.tvtime.setText("hh/mm");
holder.tvrewardpoint.setText(arrayList.get(position).get("rewardpoint_infomation"));
holder.itemView.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick (View view) {
Bundle bundle =new Bundle ();
Intent intent = new Intent ();
holder.ShopIDnum = holder.tvname.getText ().toString ();
bundle.putString ("Shop_IDnum",holder.ShopIDnum);
intent.putExtras (bundle);
intent.setClass (view.getContext (),MainActivity2.class);
view.getContext ().startActivity (intent);
}
});
}
@Override
public int getItemCount() {
return arrayList.size();
}
public void makedata(){
for (int i = 0;i<100;i++){
HashMap<String,String> hashMap = new HashMap<>();
hashMap.put("name_infomation","商店代號:"+String.format("%02d",i+1));
hashMap.put("rewardpoint_infomation",String.format ("%02d",i*2));
arrayList.add(hashMap);
}
}
}