Impossible d'utiliser LayoutInflater dans la coutume adaptateur
Je suis à la recherche dans l'écriture d'un adaptateur personnalisé pour remplir une listview avec 3 textviews par ligne. J'ai trouvé tout à fait un peu de code en exemple pour ce faire, mais celui qui semblait le meilleur était à l': http://www.anddev.org/custom_widget_adapters-t1796.html
Après quelques modifications mineures à résoudre certains problèmes de compilateur avec le dernier kit de développement Android, je l'ai eu en cours d'exécution, seulement pour obtenir de l'exception:
ERREUR/AndroidRuntime(281): java.lang.UnsupportedOperationException: addView(Vue, LayoutParams) n'est pas pris en charge dans AdapterView
J'ai donc fait beaucoup de recherches et trouvé beaucoup de raisons possibles et des correctifs pour cela. Rien de ce qui a changé une chose. Mon code d'adaptateur est actuellement:
public class WeatherAdapter extends BaseAdapter {
private Context context;
private List<Weather> weatherList;
public WeatherAdapter(Context context, int rowResID,
List<Weather> weatherList ) {
this.context = context;
this.weatherList = weatherList;
}
public int getCount() {
return weatherList.size();
}
public Object getItem(int position) {
return weatherList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
Weather weather = weatherList.get(position);
//LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.weather_row, null, true);
TextView cityControl = (TextView)v.findViewById( R.id.city );
TextView temperatureControl = (TextView)v.findViewById( R.id.temperature );
ImageView skyControl = (ImageView)v.findViewById( R.id.sky );
return v;
}
}
J'ai donc tenté l'commenté de manière à obtenir des inflater, et actuellement sans commentaire. J'ai essayé en passant "parent" pour gonfler ainsi que la valeur null, et en passant "vrai", "faux" et en omettant complètement le dernier paramètre. Aucun d'entre eux ont travaillé, et tous les exemples que j'ai trouvé à ce jour ont été de 2008 où j'ai le sentiment est un peu dépassé.
Si quelqu'un pouvait aider avec cela, puis j'aimerais résoudre le problème.
OriginalL'auteur Teknogrebo | 2010-11-29
Vous devez vous connecter pour publier un commentaire.
Je suis débutant aussi, afin de prendre cette réponse avec une pincée de sel - si cela ne fonctionne pas, aller de l'avant et Google plus. Pas familier avec
AdapterView
depuis que j'ai ont traditionnellement uneListView
ouGridView
et un Adaptateur personnalisé étendu en dehors d'unBaseAdapter
et puislistView.setAdapter(myCustomAdapter)
.Vous pourriez essayer de faire quelque chose comme cela à l'intérieur de la
WeatherAdapter
classe:Alors dans la classe qui appelle
WeatherAdapter
:Aussi vous avez besoin pour optimiser plus dans la méthode getView:
http://www.youtube.com/watch?v=wDBM6wVEO70
OriginalL'auteur albnok
Je crois que cette ligne est en faute:
Vous avez besoin au lieu:
La fausse rend le gonflés vue indépendant de la société mère, qui n'est pas attachée à elle, qui très curieusement semble être la conception admise pour les vues personnalisées dans
AdapterView
s. Pourquoi il en est ainsi, je trouve tout à fait déconcertant, mais le modèle ci-dessus a fonctionné pour moi.AdapterView
vous voulez que votre point de vue à être indépendant de la société mère,getView()
prend soin de l'attacher à un parent pour vous.Je ne dirais pas
getView()
prend soin de lui depuis vous sont l'écriture, je dirais plutôt tout ce que les appelsgetView()
(en d'autres termes, le cadre) prend soin de fixation de la vue. retournée pargetView()
.OriginalL'auteur Clint
Pour la
AdaptertView addView
méthode:Probablement le gonflage des appels de procédure de la
addView
méthode et ce n'est pas possible à partir d'unAdapterView
, ou de sesAdapterView
.À partir de la documentation:
Je pense que le gonflage opération peut être effectuée à partir d'une simple Activité que les modèles de votre point de vue et toutes les autres opérations, par exemple, l'extraction de données et l'affichage de données dans d'autres classes.
L'espoir qu'il sera utile!
OriginalL'auteur bifulcoluigi
@Axel22 la réponse est la clé, mais il ya quelques autres choses qui manquent à partir de votre code. Tout d'abord, vous devriez être en extension, soit BaseAdapter ou ArrayAdapter, selon vos préférences. Deuxièmement, vous voulez obtenir dans la pratique de l'aide d'un ViewHolder pour éviter de faire une excessive des appels à findViewById, et (surtout) de recyclage de votre point de Vue.
Votre getView fonction peut recycler les points de vue et utiliser le
ViewHolder
classe comme suit:}
Pour des tonnes d'autres exemples (et d'autres conseils d'optimisation), voir ce blog (ou tout simplement google pour ViewHolder).
OriginalL'auteur mrmcduff