java - 具有自定义适配器的ListView子类: basic Java Q

标签 java android listview

我正在创建 ListView 的子类,它需要一个专门的适配器来子类 ListAdapter (CustomAdapter)。我想保留 setAdaptergetAdapter 方法,因为它们是程序员希望与 AdapterView 一起使用的标准方法。

我可以重写 getter:

@Override
public CustomAdapter getAdapter() {...}

因为它仍然返回一个ListAdapter。但是,我无法覆盖 setter :

@Override 
public void setAdapter(CustomAdapter adapter) {...}

我明白为什么 Java 不允许我这样做。因此,为了解决这个问题,我现在这样做:

@Override
public void setAdapter(ListAdapter adapter) {
    throw new UnsupportedOperationException("adapter must be an instance of CustomAdapter");
}

public void setAdapter(CustomAdapter adapter) {
    this.adapter = adapter;
} 

我认为这没什么大不了的,但它有点让我烦恼。仍然公开原始的 ListAdapter setter 似乎不太优雅(特别是因为它显示在自动完成列表中)。有什么方法可以抑制原始 setter ,或者上面的 block 是执行此操作的正确方法吗?

谢谢

最佳答案

为什么不

@Override
public void setAdapter(ListAdapter adapter) {
    if (adapter instanceof CustomAdapter) {
        this.adapter = (CustomAdapter adapter)
    } else {
        throw new IllegalArgumentException("adapter must be an instance of CustomAdapter");
    }
}

关于java - 具有自定义适配器的ListView子类: basic Java Q,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640066/

相关文章:

java - 如何正确构建包含名为 *(星号)的属性的 JSON

java - 有地理哈希集合吗?

java - 加入一组总超时的线程

java - 使用类中生成的 Hashmap ArrayList 数据在 MainActivity 的 ListView 中使用?

android - 如何遍历android中 ListView 每一行中的每个复选框?

c# - 从 ListView 中检索数据

java - 在不知道所需对象数量的情况下,如何为同一个类创建多个对象?

android - 如何将 firebase 存储文件与 firebase 数据库互连

java - 如何将数据从列表适配器发送到 android 中的 Activity ?

android - 如何在 Android 中制作拖放按钮