首页 > 解决方案 > 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;
        }
    });

但是,这仅在第一次起作用,一旦微调器被禁用,它就再也不会接收到任何触摸事件。我怎样才能解决这个问题?

标签: androidspinnerandroid-spinnertouch-eventontouchlistener

解决方案


使用 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);
            }
        }
    });

推荐阅读