RecyclerView實現Item點擊事件方法一

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中申明并實現了,下面我們看下實現效果

xml-imp


此方法是我在看google sample時看到的一種實現方式,是不是很簡單,而且很速度,但有人會問了,這根本沒什么作用啊,item被點擊時我要怎么知道點擊是哪個位置了?
so easy,看修改后的ActivityonItemClick代碼,代碼如下:

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方法中的參數view剛好是我們點擊的ItemView


至此我們基本實現了RecyclerView的條目點擊事件并知道了怎么獲取position,但這種方式實現起來確實簡單,但有一個缺陷,那就是xml布局中設置的onClick只能在Activity中去實現,不能在Fragment中實現。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容