RecyclerView具體是什么控件拷肌,它能做什么糟秘,相信不要我來說明了简逮,當你能看到此文章,目的很明確尿赚,為RecyclerView實現(xiàn)條目點擊事件散庶,因為官方并沒有為我們實現(xiàn)蕉堰。此文章會有好幾篇,每一篇會講解一種實現(xiàn)方式與這種方式的不足之處悲龟。
Item Layout xml 設(shè)置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>
關(guān)鍵屬性android:onClick="onItemClick"
屋讶,此方法在Activity中申明并實現(xiàn)了,下面我們看下實現(xiàn)效果
xml-imp
此方法是我在看google sample時看到的一種實現(xiàn)方式须教,是不是很簡單皿渗,而且很速度,但有人會問了轻腺,這根本沒什么作用啊乐疆,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();
}
xml-item-click-index
這里簡單說下RecyclerView.getChildAdapterPosition()方法,此方法可以獲取ItemView在Adapter中的位置误算,而我們
onItemClick
方法中的參數(shù)view
剛好是我們點擊的ItemView
至此我們基本實現(xiàn)了RecyclerView的條目點擊事件并知道了怎么獲取position仰美,但這種方式實現(xiàn)起來確實簡單,但有一個缺陷儿礼,那就是xml布局中設(shè)置的onClick
只能在Activity中去實現(xiàn)咖杂,不能在Fragment中實現(xiàn)。