接上一篇,現在給我們上篇博文中的通用Adapter加上Item單擊事件。
重新生成一個帶點選事件接口的Adapter —— WithItemClickAdapter
package com.dfsebook.myrecycleradapter.adapter; import android.databinding.DataBindingUtil; import android.databinding.ViewDataBinding; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.List; /** * Created by Administrator on 16-7-18. */ public class WithItemClickAdapter<T> extends RecyclerView.Adapter<WithItemClickAdapter.WithItemClickViewHolder>{ private List<T> mDatas; private int layoutId; private int brId; private ItemClickLister itemClickLister; public void setItemClickLister(ItemClickLister itemClickLister) { this.itemClickLister = itemClickLister; } public WithItemClickAdapter(List<T> mDatas, int layoutId, int brId) { this.mDatas = mDatas; this.layoutId = layoutId; this.brId = brId; } @Override public WithItemClickViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); ViewDataBinding binding = DataBindingUtil.inflate(inflater, layoutId, parent, false); WithItemClickViewHolder viewHolder = new WithItemClickViewHolder(binding.getRoot()); viewHolder.setBinding(binding); return viewHolder; } @Override public void onBindViewHolder(WithItemClickAdapter.WithItemClickViewHolder holder, int position) { holder.getBinding().setVariable(brId,mDatas.get(position)); holder.getBinding().executePendingBindings(); } @Override public int getItemCount() { return mDatas == null ? 0 : mDatas.size(); } public class WithItemClickViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private View itemView; private ViewDataBinding binding; public ViewDataBinding getBinding() { return binding; } public void setBinding(ViewDataBinding binding) { this.binding = binding; } public WithItemClickViewHolder(View itemView) { super(itemView); this.itemView = itemView; this.itemView.setOnClickListener(this); } @Override public void onClick(View view) { if(itemClickLister != null) itemClickLister.onItemClick(getLayoutPosition()); } } public interface ItemClickLister{ void onItemClick(int position); } }
于上篇不同的是,在Adapter中生成一個内部類繼承自RecyclerView.ViewHolder,并實作了View.OnClickListener方法。同時給Adapter添加Item單擊接口ItemClickListener,在ViewHolder中傳遞點選位置資訊,這裡是int資料getLayoutPosition。
第二步:代碼實作
<span style="font-size:14px;">package com.dfsebook.myrecycleradapter.activity; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; import android.widget.Toast; import com.dfsebook.myrecycleradapter.BR; import com.dfsebook.myrecycleradapter.R; import com.dfsebook.myrecycleradapter.adapter.WithItemClickAdapter; import com.dfsebook.myrecycleradapter.bean.Student; import com.dfsebook.myrecycleradapter.utils.InitRecyclerView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements WithItemClickAdapter.ItemClickLister{ private List<Student> students; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recyclerView = (RecyclerView)findViewById(R.id.show_list); InitRecyclerView.initLinearLayoutVERTICAL(this,recyclerView); students = new ArrayList<>(); Student student = new Student(R.drawable.tx2,"Kate"); students.add(student); student = new Student(R.drawable.tx3,"Alen"); students.add(student); student = new Student(R.drawable.tx4,"Johnson"); students.add(student); student = new Student(R.drawable.tx5,"Make"); students.add(student); WithItemClickAdapter<Student> adapter = new WithItemClickAdapter<>(students,R.layout.student_item,BR.student); adapter.setItemClickLister(this); recyclerView.setAdapter(adapter); } @Override public void onItemClick(int position) { Toast.makeText(MainActivity.this, students.get(position).getName(), Toast.LENGTH_LONG).show(); } }</span>
這樣就實作了Item單擊功能,就不上截圖了。
同樣的方法可為RecyclerView添加長按事件OnItemLongClickListener,在這兒就不上代碼了。
下一篇我們為R ecyclerView添加頭部HeadView。