接上一篇,现在给我们上篇博文中的通用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。