2010-06-18 4 views
16

Im en utilisant un SpinnerAdapter pour afficher un Spinner. Pour cela j'ai défini une classe qui implémente SpinnerAdapter. Malheureusement, je ne sais pas comment passer outre certaines méthodes de SpinnerAdapter:Comment remplacer correctement les méthodes de 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) { 

} 

Quelqu'un sait-il ce que je dois code dans chacune de ces méthodes?

Répondre

37

Merci pour les réponses, mais néanmoins je veux partager avec vous la solution je après avoir cherché des références:

lieu qui vient mettre en œuvre SpinnerAdapter dans mon adaptateur, je tiens BaseAdapter et mettons en œuvre 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; 
     } 

    } 

Ensuite, il est pas nécessaire de passer outre toutes ces méthodes étranges telles que isEmpty(), registerDataObserver(), etc.

Et si necessry on peut encore passer outre getDropDownView (...)

De plus, en utilisant cette solution, on peut appeler adapter.notifyDatasetChanged() ce qui n'est pas aussi simple si l'adaptateur implémente simplement SpinnerAdapter et n'étend pas BaseAdapter.

+2

Qu'est-ce que allLists et où l'obtenez-vous ou le créez-vous? – CACuzcatlan

+0

@CACuzcatlan allLists peut être une ArrayList si vous supprimez .getName() de getView. –

+0

BaseAdapter implémente déjà SpinnerAdapter, vous n'avez donc pas besoin de l'implémenter à nouveau. http://developer.android.com/reference/android/widget/BaseAdapter.html Et considérez s'il vous plaît ma réponse. –

2

La méthode la plus importante si getDropDownView(). Cela crée une instance View pour afficher les données à l'ID sélectionné. arg1 est la vue convertie, une vue existante qui peut être modifiée et renvoyée par la fonction afin de ne pas avoir besoin de créer une nouvelle vue à chaque fois que l'utilisateur sélectionne un index de données. arg2 est le parent ViewGroup dans lequel la vue créée (ou convertie) doit être placée.

Les autres méthodes sont héritées de la classe Adapter, et leur implémentation ne peut vraiment être comprise que dans ce contexte. Leur utilisation est documentée here.

+0

hmm oui mais je ne comprends pas si par ex. je dois retourner vrai ou faux dans public boolean hasStableIds() {}. Et quelle est la différence entre getDropDownView et getView()? – RoflcoptrException

1

Regardez les sources de BaseAdapter. Vous avez juste besoin d'ajouter ces lignes à votre implémentation ListAdapter ou SpinnerAdapter personnalisée.

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(); 
} 
Questions connexes