RecyclerView具体是什么控件,它能做什么,相信不要我来说明了,当你能看到此文章,目的很明确,为RecyclerView实现条目点击事件,因为官方并没有为我们实现。此文章会有好几篇,每一篇会讲解一种实现方式与这种方式的不足之处。
Item Layout xml 设置onClick
Activity Code
public class XmlImpItemClickActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RecyclerView recyclerView = new RecyclerView(this);
setContentView(recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new Adapter());
}
public void onItemClick(View view) {
Toast.makeText(XmlImpItemClickActivity.this, "item click", Toast.LENGTH_SHORT).show();
}
}
Adapter Code
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.xml_imp_click_item,parent,false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
TextView textView = (TextView) holder.itemView.findViewById(android.R.id.text1);
textView.setText("item" + position);
}
@Override
public int getItemCount() {
return 50;
}
static class ViewHolder extends RecyclerView.ViewHolder{
public ViewHolder(View itemView) {
super(itemView);
}
}
}
xml layout code
<?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="50dp"
android:orientation="vertical"
android:onClick="onItemClick"
android:background="?attr/selectableItemBackground">
<TextView
android:id="@android:id/text1"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
关键属性android:onClick="onItemClick"
,此方法在Activity中申明并实现了,下面我们看下实现效果
此方法是我在看google sample时看到的一种实现方式,是不是很简单,而且很速度,但有人会问了,这根本没什么作用啊,item被点击时我要怎么知道点击是哪个位置了?
so easy,看修改后的Activity
中onItemClick
代码,代码如下:
public void onItemClick(View view) {
int childAdapterPosition = recyclerView.getChildAdapterPosition(view);
Toast.makeText(XmlImpItemClickActivity.this, "item click index = "+childAdapterPosition, Toast.LENGTH_SHORT).show();
}
这里简单说下RecyclerView.getChildAdapterPosition()方法,此方法可以获取ItemView在Adapter中的位置,而我们
onItemClick
方法中的参数view
刚好是我们点击的ItemView
至此我们基本实现了RecyclerView的条目点击事件并知道了怎么获取position,但这种方式实现起来确实简单,但有一个缺陷,那就是xml布局中设置的onClick
只能在Activity中去实现,不能在Fragment中实现。