2010-06-18 21 views
16

Im Verwenden eines SpinnerAdapter zum Anzeigen eines Spinner. Dafür habe ich eine Klasse definiert, die SpinnerAdapter implementiert. Leider weiß ich nicht, wie einige Methoden der SpinnerAdapter außer Kraft zu setzen:So überschreiben Sie die Methoden von 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) { 

} 

Weiß jemand, was ich in jeder dieser Methoden zur Code?

Antwort

37

Danke für die Antworten, aber dennoch möchte ich mit Ihnen die Lösung, die ich nach weiteren Artikeln Suche verwendet teilen:

Statt dass nur SpinnerAdapter in meinem Adapter Implementierung erweitern ich BaseAdapter und implementieren 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; 
     } 

    } 

Dann ist es nicht notwendig, all diese seltsamen Methoden wie isEmpty außer Kraft zu setzen(), registerDataObserver() usw.

Und wenn necessry kann man noch außer Kraft setzen getDropDownView (...)

Zusätzlich zu dieser Lösung kann man adapter.notifyDatasetChanged() aufrufen, was nicht so einfach ist, wenn der Adapter nur SpinnerAdapter implementiert und BaseAdapter nicht erweitert.

+2

Was ist AllLists und wo bekommen Sie es oder erstellen Sie es? – CACuzcatlan

+0

@CACuzcatlan allLists kann eine ArrayList sein, wenn Sie .getName() aus getView entfernen. –

+0

BaseAdapter implementiert SpinnerAdapter bereits, sodass Sie es nicht erneut implementieren müssen. http://developer.android.com/reference/android/widget/BaseAdapter.html Und bitte beachten Sie meine Antwort. –

2

Die wichtigste Methode, wenn getDropDownView(). Dadurch wird eine View-Instanz erstellt, um die Daten unter der ausgewählten ID anzuzeigen. arg1 ist die Konvertierungsansicht, eine vorhandene Ansicht, die von der Funktion geändert und zurückgegeben werden kann, so dass nicht jedes Mal, wenn der Benutzer einen Datenindex auswählt, eine neue Ansicht erstellt werden muss. arg2 ist die übergeordnete ViewGroup, in die die erstellte (oder konvertierte) View eingefügt werden soll.

Die anderen Methoden werden von der Adapter-Klasse übernommen und ihre Implementierung kann nur in diesem Kontext verstanden werden. Ihre Verwendung ist dokumentiert here.

+0

hmm ja, aber ich verstehe nicht, wenn z. Ich muss wahr oder falsch in öffentlichen booleschen hasStableIds() {} zurückgeben. Und was ist der Unterschied zwischen getDropDownView und getView()? – RoflcoptrException

1

Schauen Sie sich die Quellen von BaseAdapter an. Sie müssen diese Zeilen nur zu Ihrer benutzerdefinierten ListAdapter- oder SpinnerAdapter-Implementierung hinzufügen.

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(); 
} 
Verwandte Themen