【问题标题】:Android enable/disable spinner touch listener at conditionAndroid 在条件下启用/禁用微调器触摸侦听器
【发布时间】:2020-09-29 09:24:16
【问题描述】:

我有一个带有 Spinner 的活动(带有他自己的适配器)和另一个适配器,它使用它的 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;
        }
    });

但是,这仅在第一次有效,一旦微调器被禁用,它就再也不会接收到任何触摸事件。我该如何解决这个问题?

【问题讨论】:

  • 如果它被禁用,您将不会有触摸事件。您的清单是如何填写/更新的?
  • 我有一个浮动按钮,每次按下它都会添加一个新元素
  • 您的列表有适配器吗?您应该发布您的代码,以便我们提供更多帮助。逻辑是更新适配器中的微调器。而你的浮动按钮调用 adapter.notifyDataSetChanged();

标签: android spinner android-spinner touch-event ontouchlistener


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多