长期更新 Android常用监听事件汇总( 三 )


再补充一个,再用户点击退出按钮时,想弹出一些弹窗,此时需要着重处理好,不要出现错误:
关闭和.冲突的解决( hascom....impl.)
@Overridepublic void onBackPressed() {/* super.onBackPressed(); 需要注释掉 否则会报错即弹窗依附的Activity消失 注释掉Activity不会主动消失*/mFilterManager.setCurrentFilter(FilterType.NONE);sendBroadcast(new Intent(EditImageSelectActivity.CLOSE_ANIMATION));if (is_show){showDeleteDialog();}}
②滚动监听.,监听是否滚动到最后一项
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {boolean isSlidingToLast = false;@Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) {super.onScrollStateChanged(recyclerView, newState);LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();// 当停止滑动时if (newState == RecyclerView.SCROLL_STATE_IDLE) {//获取最后一个完全显示的ItemPosition ,角标值 int lastVisibleItem = manager.findLastCompletelyVisibleItemPosition();int totalItemCount = manager.getItemCount();if (lastVisibleItem == (totalItemCount - 1) && isSlidingToLast) {//do something}}}@Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {super.onScrolled(recyclerView, dx, dy);if (dy > 0) {isSlidingToLast = true;} else {isSlidingToLast = false;}}});
③添加滑动监控.,比如列表滑动时涉及UI变化:
注:这里使用的是()方法,上面使用的是()方法 。
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {@Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) {if (newState == RecyclerView.SCROLL_STATE_IDLE) {btnClear.show(); //列表停止滑动时 右下角悬浮按钮设为可见}super.onScrollStateChanged(recyclerView, newState);}@Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {if (dy > 0 || dy < 0 && btnClear.isShown()) {btnClear.hide(); //列表滑动时 右下角悬浮按钮设为不可见}super.onScrolled(recyclerView, dx, dy);}});
④列表项做到左右滑动.,并且滑动时进行删除:
比如方片的效果:
监听事件代码如下:
final SongAdapter songAdapter = new SongAdapter(songList);ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {@Overridepublic boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {return false;}@Overridepublic void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {songAdapter.removeItem(viewHolder.getAdapterPosition());}});recyclerView.setAdapter(songAdapter);recyclerView.scrollToPosition(songAdapter.getItemCount() - 1); //进入列表页面时 滑动至最后一项helper.attachToRecyclerView(recyclerView);
自定义删除列表项的方法():
public void removeItem(int position) {mSongList.remove(position);notifyItemRemoved(position); //删除列表数据是调用此方法}
注:这里删除并不是真的删除,只是简单的视觉上的移除,下次进入还是会有数据;真正的删除需要处理其他逻辑,比如调用数据库的删除方法进行数据的删除 。
随时添加 欢迎补充