[0.]本案例使用这篇的项目(你也可以用其他的):4-VI--☆ListView的封装支持多种条目 [1].条目点击事件 [2].条目长按事件 [3].滑动事件 [4].条目抢占交点问题
几个参数----根据图片参照对应: parent:背景变成淡绿色 view:背景变成随机颜色 position:弹出来 下面未点击的变色了,可见条目已正常复用
listview点击.gif
mLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
/**
*
* @param parent ListView
* @param view 条目
* @param position 位置
* @param id id 测试Id和 position一样
*/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e(TAG, "onItemClick() called with:\n "
+ "parent = [" + parent + "], \n" +
"view = [" + view + "],\n " +
"position = [" + position + "],\n" +
" id = [" + id + "]");
parent.setBackgroundColor(0x5500ff00);
view.setBackgroundColor(ColUtils.randomColor());
ToastUtil.showAtOnce(ChatActivity.this, "当前位置:" + position);
}
});
几个参数和点击一样 值得注意的一点是返回值:
true
: 手指抬起时不触发条目的点击事件false
: 手指抬起时触发条目的点击事件
mLv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
ToastUtil.showAtOnce(ChatActivity.this, "长按--当前位置:" + position);
return true;
}
});
有两个回调方法: onScrollStateChanged(AbsListView view, int scrollState) onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
listview滑动.gif
mLv.setOnScrollListener(new AbsListView.OnScrollListener() {
/**
*
* @param view ListView
* @param scrollState 上滑 1 滑动结束 0
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
view.setBackgroundColor(scrollState == 0 ? 0x5500ff00 : 0x550000ff);
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
/**
*
* @param view view ListView
* @param firstVisibleItem 最顶端条目的id
* @param visibleItemCount 可见的条目数
* @param totalItemCount 总条目数
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
mIsLastItem = visibleItemCount + firstVisibleItem == totalItemCount;
mIsTopItem = firstVisibleItem == 0;
}
滑动到上下端监听.gif
/**
* 是否滑到最底端
*/
private boolean mIsLastItem;
/**
* 是否滑到最顶端
*/
private boolean mIsTopItem;
mLv.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
view.setBackgroundColor(scrollState == 0 ? 0x5500ff00 : 0x550000ff);
if (scrollState == 0) {
if (mIsLastItem) {
ToastUtil.show(ChatActivity.this, "滑到最底端");
}
if (mIsTopItem) {
ToastUtil.show(ChatActivity.this, "滑到最顶端");
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
mIsLastItem = visibleItemCount + firstVisibleItem == totalItemCount;
mIsTopItem = firstVisibleItem == 0;
}
});
只在一类布局上加上CheckBox,看图对比
交点抢占.gif
CheckBox checkBox = (CheckBox) holder.getView(R.id.id_cb_left);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
ToastUtil.showAtOnce(ChatActivity.this,
"状态改变为:"+(isChecked?"已选择":"未选中"));
}
});
checkBox.setFocusable(false);
抢占交点解决.gif
本文由张风捷特烈原创,转载请注明 更多安卓技术欢迎访问:https://www.jianshu.com/c/004f3fe34c94 张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com 你的喜欢与支持将是我最大的动力