基于上一篇RecyclerView的基本用法,写一下它的item的点击事件的监听,主要是先熟悉接口回调的原理和用法。
1、首先定义了一个接口RecyclerViewCallback
public interface RecyclerViewCallback { public void onItemClick(View itemView,int position); }
2、接着创建RecyclerViewTest类实现了定义的接口
public class RecyclerViewTest extends Activity implements RecyclerViewCallback{
private RecyclerView recyclerView;
private RecyclerViewAdapter adapter;
private ArrayList
dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//添加数据
initData();
//初始化控件
setUpView();
}
private void initData(){
dataList = new ArrayList
();
for(int i = 0; i < 10; i++){
dataList.add("item"+i);
}
}
private void setUpView(){
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
//设置布局管理器
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//添加分割线
recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
//创建适配器
adapter = new RecyclerViewAdapter(this,dataList);
//传回调接口
adapter.setOnMyClickListener(this);
//给RecyclerView设置适配器
recyclerView.setAdapter(adapter);
}
/**
* 点击动作发生条件满足时回调此方法。
* @param itemView
* @param position
*/
@Override
public void onItemClick(View itemView, int position) {
Toast.makeText(RecyclerViewTest.this,"点击了item" + position,Toast.LENGTH_SHORT).show();
}
}
3、适配器
public class RecyclerViewAdapter extends RecyclerView.Adapter
{
private Context mContext;
private ArrayList
dataList;
private RecyclerViewCallback callback;
public RecyclerViewAdapter(Context mContext, ArrayList
dataList){
this.mContext = mContext;
this.dataList = dataList;
}
/**注册接口*/
public void setOnMyClickListener(RecyclerViewCallback callback){
this.callback = callback;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_recycler_view,parent,false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv.setText(dataList.get(position));
holder.itemView.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
//当点击item时回调onItemClick函数,处理点击事件。
callback.onItemClick(view,getPosition());
}
});
}
@Override
public int getItemCount() {
return dataList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public MyViewHolder(View itemView){
super(itemView);
tv = (TextView)itemView.findViewById(R.id.tv);
}
}
}