天天看點

2-VII-RecyclerView事件

[1].本文接上文: RecyclerView基本使用

[2].RecyclerView把很多事都交給了我們,就連item的點選事件都沒有

[3].在adapter中加載布局的時候,可以為item添加事件

[4].沒有點選效果,還要自己添加點選的選擇器

[5].RecyclerView增删條目以及條目運動效果

一、點選事件

方式1.修改:FirstRvAdapter#onCreateViewHolder
public FirstViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //加載布局檔案
    View itemView = LayoutInflater.from(mCtx).inflate(R.layout.item_rv, null);
    final FirstViewHolder holder = new FirstViewHolder(itemView);
    //點選監聽
    itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ToastUtil.showAtOnce(mCtx, "Position:"+holder.getLayoutPosition());
        }
    });
    return holder;
}
           
方式2:可以添加回調,将事件推到Activity中

1.FirstRvAdapter中監聽點選事件

public FirstViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
        //加載布局檔案
        final View itemView = LayoutInflater.from(mCtx).inflate(R.layout.item_rv, null);
        final FirstViewHolder holder = new FirstViewHolder(itemView);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnItemClickListener != null) {
                    mOnItemClickListener.onclick(itemView, parent, holder.getLayoutPosition());
                }
            }
        });
        return holder;
    }

    /////////////////////條目點選監聽/////////////////////////////////////
    public interface OnItemClickListener {
        void onclick(View itemView, ViewGroup parent, int position);
    }

    private OnItemClickListener mOnItemClickListener;

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        mOnItemClickListener = onItemClickListener;
    }
           

2.Activity中使用:

mAdapter.setOnItemClickListener(new FirstRvAdapter.OnItemClickListener() {
    @Override
    public void onclick(View itemView, ViewGroup parent, int position) {
        ToastUtil.showAtOnce(DiverRVActivity.this, mData.get(position));
    }
});
           

rv點選1.gif

二、背景選擇器

添加點選效果:可以自定義選擇器

為item的背景添加:安卓自帶波紋樣式的選擇器

//有邊界
android:background="?android:attr/selectableItemBackground"
//無邊界
android:background="?android:attr/selectableItemBackgroundBorderless"
           

rv點選2.gif

也可以自定義水波紋的樣式:

v21及以上有效果

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/gray"><!-- press和水波紋的顔色 -->
    <item>
        <!--item中可以自定義shape-->
        <shape
            android:innerRadius="5dp"
            android:shape="rectangle">
            <solid android:color="@color/white"/>
            <corners android:radius="1dp"/>
        </shape>
    </item>
</ripple>
           

v21以下無效果

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/colorPrimaryDark" android:state_pressed="true"/>
    <item android:drawable="@color/colorPrimary"/>
</selector>
           

三、添加與删除:效果是單機添加,長按删除

1.FirstRvAdapter中照樣子添加長按監聽:
/////////////////////條目長按監聽/////////////////////////////////////
    public interface OnItemLongClickListener {
        void onLongClick(View itemView, ViewGroup parent, int position);
    }

    private OnItemLongClickListener mOnItemLongClickListener;

    public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
        mOnItemLongClickListener = onItemLongClickListener;
    }
           
2.FirstRvAdapter添加删除與添加方法:
/**
     * 添加item
     *
     * @param i 位置
     * @param str 值
     */
    public void addData(int i, String str) {
        data.add(i, str);
        notifyItemInserted(i);//重新整理資料
    }

    /**
     * 删除item
     *
     * @param i 位置
     */
    public void deleteData(int i) {
        data.remove(i);
        notifyItemRemoved(i);//重新整理資料
    }

           
3.Activity中使用:
mAdapter.setOnItemClickListener(new FirstRvAdapter.OnItemClickListener() {
    @Override
    public void onclick(View itemView, ViewGroup parent, int position) {
        mAdapter.addData(position, ZRandom.randomCnName());
        mRecyclerView.scrollToPosition(0);//滑動到某個條目
    }
});

mAdapter.setOnItemLongClickListener(new FirstRvAdapter.OnItemLongClickListener() {
    @Override
    public void onLongClick(View itemView, ViewGroup parent, int position) {
        mAdapter.deleteData(position);
    }
});
           

增加與删除.gif

後記、

1.聲明:

[1]本文由張風捷特烈原創,轉載請注明

[2]歡迎廣大程式設計愛好者共同交流

[3]個人能力有限,如有不正之處歡迎大家批評指證,必定虛心改正

[4]你的喜歡與支援将是我最大的動力

2.連接配接傳送門:
更多安卓技術歡迎通路:安卓技術棧 我的github位址:歡迎star 簡書首發,騰訊雲+社群同步更新 張風捷特烈個人網站,程式設計筆記請通路: http://www.toly1994.com
3.聯系我

QQ:1981462002

郵箱:

[email protected] 微信:zdl1994328
4.歡迎關注我的微信公衆号,最新精彩文章,及時送達:

公衆号.jpg

繼續閱讀