android - Android 在条件下启用/禁用微调器触摸侦听器
问题描述
我有一个 Spinner (带有他自己的适配器)和另一个 Adapter 的活动,它使用它的 list 管理回收器视图。我正在尝试实现以下逻辑:当回收器列表为空时,应该启用微调器,否则应该禁用它,直到列表再次为空:
sGames.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (pokemonCardsGridAdapter.getItemCount() == 0) {
v.performClick();
v.setEnabled(true);
} else {
v.setEnabled(false);
Toast.makeText(PokemonTeambuilderEditorActivity.this, "The list is full", Toast.LENGTH_SHORT).show();
}
return false;
}
});
但是,这仅在第一次起作用,一旦微调器被禁用,它就再也不会接收到任何触摸事件。我怎样才能解决这个问题?
解决方案
使用 registerAdapterDataObserver 解决:
pokemonCardsGridAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
public void onChanged() {
sGames.setEnabled(false);
}
public void onItemRangeRemoved(int positionStart, int itemCount) {
if (pokemonCardsGridAdapter.getItemCount() == 0) {
sGames.setEnabled(true);
}
}
});
推荐阅读
- sql - 如果月份更改,则在 sql 查询之间不起作用
- speech-to-text - 缺少 getUserMedia MediaRecorder 数据
- php - 如何在将 google+ 登录与我们的网站集成时解决错误 400(OAuth_error)?
- sony - Sony Remote API with a7 iii getAvailableFNumber 40404
- hibernate - 我该如何解决这个 Spring UnsatisfiedDependencyException
- azure - Service Fabric:图像下载过程中出错
- google-cloud-storage - 是否可以通过 Google Cloud Storage 在 Google Compute Instance 中提供静态文件?
- jquery - 如何更改字体大小?
- javascript - 如何使用 React Router v4 (Sidebar) 创建多个路由?
- java - 如何以编程方式阻止android中的所有通知?