【问题标题】:Disable a item in the adapter of an AdapterView禁用 AdapterView 的适配器中的项目
【发布时间】:2013-07-23 15:54:44
【问题描述】:

基本上,当我取消选中第一项上的框时,我希望第二项“灰显”且不可点击或禁用。

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position,  long id) {


        if(position == 0) { 
            //disable.enable push
            CheckBox checkBox = (CheckBox) mRoot.findViewById(R.id.cbRowCheckBox);
            checkBox.setChecked(!checkBox.isChecked());

            mPushEnabled = checkBox.isChecked();

            if (mPushEnabled) {
                //code for push enabled
                //code to let position 1 enabled, i was thinking something along th e lines,
               adapter.getposition(1).setEnabled(true);
            } else {
                //code for push disabled
                adapter.getposition(1).setEnabled(false);
            }
        } else if(position == 1) {
            //push notification settings
            //open intent
        }
    }

我在想我可以获取项目所在的位置,然后将其设置为 false 为 setEnabled()。那是正确的方法吗?如果是这样,我不知道如何定位该项目。如果现在,最好的方法是什么?

【问题讨论】:

  • 您应该使用 PreferenceActivity 和 android:dependency 属性。非本地偏好是一个非常非常非常非常非常糟糕的主意
  • 我只想知道如何在按下位置 0 时禁用列表位置 1 ..... 我有所有其他逻辑。我把它拿出来,所以这将是一个很长的帖子
  • 这正是 PreferenceActivity 和依赖项的用途。我只是想确定你不能使用它们,我仍然不相信

标签: android android-listview android-adapterview onitemclick


【解决方案1】:

getposition 到底是做什么的?

我认为你不能直接从适配器获取视图,因为它们经常被 listView 重用。

我认为最好的方法是跟踪您想要启用的项目位置,并通过适配器中的 getView() 或 bindView() 方法相应地更新视图。

【讨论】:

    【解决方案2】:

    基本上我想当我取消选中第一项上的框时,第二项 项目“灰显”且无法点击或禁用。

    当您检查 CheckBox 在适配器级别存储下一行的 position 时,该行将被禁用并调用 notifyDataSetChanged()

    在适配器中,首先覆盖isEnabled() 方法并使其返回false,如果位置参数与先前存储的禁用行位置匹配(对于任何其他位置为true)。这将使该行不可点击。

    然后在getView() 方法中检查当前位置是否是禁用行的位置,并使其看起来褪色或您想要的其他方式。

    【讨论】:

    • notifydatasetchanged() 使其到达复选框始终选中的位置...当我单击时,它永远不会改变
    • @DDukesterman 我不知道您在做什么,尤其是当您在 mRoot 视图(?!?)而不是 view 参数中查找该 CheckBox 时。我制作了一个基本示例,您可以在这里找到 github.com/luksprog/DroidPlayground/blob/master/src/com/… 。对于更复杂的场景,您应该使用基于偏好的活动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2021-08-21
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多