1.本文接上文:RecyclerView基本使用 2.RecyclerView把很多事都交给了我们,就连item的点击事件都没有 3.在adapter中加载布局的时候,可以为item添加事件 4.没有点击效果,还要自己添加点击的选择器 5.RecyclerView增删条目以及条目运动效果
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;
}
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;
}
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>
/////////////////////条目长按监听/////////////////////////////////////
public interface OnItemLongClickListener {
void onLongClick(View itemView, ViewGroup parent, int position);
}
private OnItemLongClickListener mOnItemLongClickListener;
public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
mOnItemLongClickListener = onItemLongClickListener;
}
/**
* 添加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);//刷新数据
}
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
本文由张风捷特烈原创,转载请注明 更多安卓技术欢迎访问:https://www.jianshu.com/c/004f3fe34c94 张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com 你的喜欢与支持将是我最大的动力