如何正确覆盖SpinnerAdapter的方法

我使用SpinnerAdapter来显示一个微调。 为此我定义了一个实现SpinnerAdapter的类。 不幸的是,我不知道如何重写SpinnerAdapter的一些方法:

@Override public View getDropDownView(int position, View arg1, ViewGroup arg2) { } @Override public int getItemViewType(int arg0) { } @Override public boolean hasStableIds() { } @Override public void registerDataSetObserver(DataSetObserver arg0) { } @Override public void unregisterDataSetObserver(DataSetObserver observer) { } 

有没有人知道我必须在每种方法中编码?

Solutions Collecting From Web of "如何正确覆盖SpinnerAdapter的方法"

感谢您的回答,但是我想在search更多的参考文献后与您分享我使用的解决scheme:

相反,只是在适配器中实现SpinnerAdapter,我扩展了BaseAdapter并实现了SpinnerAdapter:

 private class ListAdapter extends BaseAdapter implements SpinnerAdapter { @Override public int getCount() { return allLists.size(); } @Override public Object getItem(int position) { return allLists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View view, ViewGroup parent) { TextView text = new TextView(lexs); text.setText(allLists.get(position).getName()); return text; } } 

那么就没有必要重写所有这些奇怪的方法,如isEmpty(),registerDataObserver()等

如果必要的话,仍然可以重写getDropDownView(…)

另外使用这个解决scheme,可以调用adapter.notifyDatasetChanged(),如果适配器只是实现了SpinnerAdapter并且不扩展BaseAdapter,那么就不那么容易。

如果getDropDownView()是最重要的方法。 这将创build一个View实例来显示所选ID上的数据。 arg1是转换的视图,一个现有的视图,可以修改和返回的function,每次用户select一个数据索引时不需要创build一个全新的视图。 arg2是创build(或转换)的视图应放置在其中的父ViewGroup。

其他方法是从Adapter类inheritance而来的,只有在这种情况下才能真正理解它们的实现。 他们的用法logging在这里 。

看看BaseAdapter的来源。 您只需将这些行添加到您的自定义ListAdapter或SpinnerAdapter实现。

 private final DataSetObservable mDataSetObservable = new DataSetObservable(); @Override public void registerDataSetObserver(DataSetObserver observer) { mDataSetObservable.registerObserver(observer); } @Override public void unregisterDataSetObserver(DataSetObserver observer) { mDataSetObservable.unregisterObserver(observer); } /** * Notifies the attached observers that the underlying data has been changed * and any View reflecting the data set should refresh itself. */ public void notifyDataSetChanged() { mDataSetObservable.notifyChanged(); }