安卓開發 RecyclerView的點選事件
阿新 • • 發佈:2019-02-18
新增必備依賴:
compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.jakewharton:butterknife:7.0.1'//Android View設計的繫結註解
xml:(Recyclerview控制元件)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
新建一個介面:
public interface SuperOnclick {
void RVOnclick(View view, int postsion);
}
新建介面卡:
public class SuperAdapter extends RecyclerView.Adapter<SuperAdapter.Viewholder> implements View.OnClickListener { Context context; String[] strings; SuperOnclick superOnclick = null; public SuperAdapter(Context context, String[] strings) { this.context = context; this.strings = strings; } //在onCreateViewHolder()中為每個item新增點選事件 @Override public Viewholder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false); Viewholder viewholder = new Viewholder(view); //將建立的View註冊點選事件 view.setOnClickListener(this); return viewholder; } @Override public void onBindViewHolder(Viewholder holder, int position) { holder.textView.setText(strings[position]); //將position儲存在itemView的Tag中,以便點選時進行獲取 holder.itemView.setTag(position); } @Override public int getItemCount() { return strings.length; } @Override public void onClick(View v) { if (superOnclick != null) { //注意這裡使用getTag方法獲取position superOnclick.RVOnclick(v, (int) v.getTag()); } } //最後暴露給外面的呼叫者,定義一個設定Listener的方法 public void setonclick(SuperOnclick superOnclick) { this.superOnclick = superOnclick; } class Viewholder extends RecyclerView.ViewHolder { TextView textView; public Viewholder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.textview); } } }
介面卡用的xml :LineraLayout 包裹 TextView
主頁面:
public class MainActivity extends AppCompatActivity { Context context = MainActivity.this; String[] strings = {"1", "2", "3", "4", "5"}; SuperAdapter superAdapter; @Bind(R.id.recyclerview) RecyclerView recyclerview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); recyclerview.setLayoutManager(new LinearLayoutManager(this)); superAdapter=new SuperAdapter(MainActivity.this,strings); recyclerview.setAdapter(superAdapter); superAdapter.setonclick(new SuperOnclick() { @Override public void RVOnclick(View view, int postsion) { Toast.makeText(context, "點選是=" + strings[postsion], Toast.LENGTH_SHORT).show(); } }); } }
Demo截圖: