具有自定义适配器的ListView子类:基本Java Q.

时间:2011-12-27 00:05:53

标签: java android listview

我正在创建 ListView 的子类,它需要一个专门的适配器,它是 ListAdapter CustomAdapter )的子类。我想保留 setAdapter getAdapter 方法,因为它们是程序员希望与 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,或者上述块是否正确的方法呢?

谢谢,

1 个答案:

答案 0 :(得分:2)

为什么不

@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");
    }
}