今天下午继续在项目中学着做RecyclerView,想给每个Item添加一个点击跳转,翻了翻买的两本书发现没有呃,只能百度+看看网上前辈们的代码了。
翻了一些比较不错的文章,了解到大概的几种实现方法:
1.通过RecyclerView中预留的addOnItemTouchListener()方法
2.在Adapter创建ItemView时添加事件监听
3.当ItemView attach RecyclerView时实现
(出处http://blog.devwiki.net/index.php/2016/07/24/three-ways-click-recyclerview-item.html?utm_source=tuicool&utm_medium=referral)
第1,3种实现在单独的类中,可以使代码更简洁。第2种方法更简单实现,我先试了一下该方法,用在了最近的项目里面(项目地址:http://github.com/LAILAIWA/Slinky2)
这里我写在了我的Fragment的initData()里面,设置适配器的后面
//添加监听回调
mAdapter.setClickListener(new GeneralAdapter.ItemClickListener(){
@Override
public void OnItemClick(View view, int position) {
Log.e("-----Item clicked-----",String.valueOf(position));
Toast.makeText(getActivity(), "Item " + position + " clicked:", Toast.LENGTH_SHORT).show();
//跳转动作
}
});
更改了之前写的adapter
public class GeneralAdapter extends RecyclerView.Adapter<GeneralAdapter.MyViewHolder> {
private List<team> mDatas;
private LayoutInflater mInflater;
private ItemClickListener ClickListener;
public GeneralAdapter(Context context, List<team> mDatas) {
this.mDatas = mDatas;
mInflater = LayoutInflater.from(context);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(mInflater.inflate(
R.layout.item_common_adapter, parent, false));
return holder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
//为holde设置指定数据,将数据绑定到每一个childView中
team tdata = mDatas.get(position);
holder.tvTeamTitle.setText(tdata.title);
holder.tvTeamInfo.setText(tdata.charge1);
holder.tvTeamType.setText(tdata.type);
//创建view时添加监听事件
if(ClickListener != null){
holder.tvTeamTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ClickListener.OnItemClick(view,position);
}
});
holder.tvTeamInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ClickListener.OnItemClick(view,position);
}
});
holder.tvTeamType.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ClickListener.OnItemClick(view,position);
}
});
}
}
public GeneralAdapter setClickListener(ItemClickListener ClickListener){
this.ClickListener = ClickListener;
return this;
}
@Override
public int getItemCount() {
return mDatas.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView tvTeamTitle;
TextView tvTeamInfo;
TextView tvTeamType;
public MyViewHolder(View view) {
super(view);
tvTeamTitle = (TextView) view.findViewById(R.id.text_team_title);
tvTeamInfo = (TextView) view.findViewById(R.id.text_team_info);
tvTeamType = (TextView) view.findViewById(R.id.text_team_type);
}
}
public interface ItemClickListener{
//声明接口ItemClickListener
void OnItemClick(View view,int position);
// void OnTitleClick(View view,int position);
// void OnInfoClick(View view,int position);
// void OnTypeClick(View view,int position);
}
}