BaseAdapter中的覆盖与GridView没有被超类调用

时间:2011-06-04 06:56:13

标签: android

我正在开始一个基于Cannot enable/disable clickable TextView inside GridView的新线程。

我发现,如果适配器连接到ListView而不是GridView,则只会调用覆盖isEnabled和来自BaseAdapter的areAllItemsEnabled:

这里不会调用这两个覆盖:

 gridview.setAdapter(new MyCustomAdapter(this));

然而,在这里他们将被称为:

 listview.setAdapter(new MyCustomAdapter(this));

所以,现在回到我原来的问题(见上文):如何切换GridView项目的启用状态(例如启用/禁用TextViews作为我的项目)?有解决方法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

  

我发现如果适配器连接到ListView而不是GridView

,则只会调用覆盖isEnabled和来自BaseAdapter的areAllItemsEnabled。

正确。虽然这些方法是在Adapter上实施的,但它们是ListView的一项功能,而不是AdapterView的功能。

  

如何切换GridView项目的启用状态(例如启用/禁用TextViews作为我的项目)?

没有“我的GridView项目的启用状态”,AFAIK。如果它们在GridView中,则会启用它们。我们欢迎您创建自己的GridView克隆,尝试在ListView实现中实现您在lookForSelectablePositionOnScreen()中找到的内容,但这不太容易。

我建议不要首先在GridView中放置不可选择的项目,或者在视觉上改变它们(例如,将它们变灰)并在用户点击它们时忽略它们。

答案 1 :(得分:0)

我正在寻找一种在GridView中解除项目/视图的方法。

我正在扩展BaseAdapter并添加

   @Override
   public boolean isEnabled(int position) {
    System.out.println("isEnabled?");
    if (position == 0)
        return true;
    return MyPreferences.getInstance(context).isLessonAccessible(validLessons.get(position));
    }

始终应该启用第一个条目,并且对于每个其他项目,我将检查是否应该启用它。每次单击GridView中的Item时都会调用该方法。我认为同样的规则也适用于列表视图。