Andere Tipps

Ich glaube, diese Linie bei Störung ist:

View v = inflater.inflate(R.layout.weather_row, null, true);

Sie müssen stattdessen:

View v = inflater.inflate(R.layout.weather_row, parent, false);

Die falsche macht die aufgeblasene Ansicht unabhängig von der Mutter, nicht mit ihm verbunden, was sehr seltsam das akzeptierten Design für benutzerdefinierte Ansichten innerhalb AdapterViews zu sein scheint. Warum dies so ist, finde ich völlig rätselhaft, aber das Muster oben für mich gearbeitet.

Für die AdaptertView addView Methode:

  

void addView (Kinder)

     

Diese Methode wird nicht unterstützt und   wirft ein   UnsupportedOperationException wenn   genannt.“(Von Android-Dokumentation)

Wahrscheinlich das Aufblasen Prozedur ruft die addView Verfahren und das ist nicht möglich, von einem AdapterView oder dessen AdapterView.

Aus der Dokumentation:

  

"Ein Adapter-Objekt dient als Brücke   zwischen einem AdapterView und   zugrunde liegende Daten für diese Ansicht. Das   Adapter ermöglicht den Zugriff auf die Daten   Artikel. Der Adapter ist auch verantwortlich   Für die Ansicht für jedes Element in der   Datensatz“.

Ich denke, dass das Aufblasen Betrieb von einer einfachen Aktivität getan werden könnte, dass die Modelle Ihrer Ansicht und alle anderen Operationen, beispielsweise das Abrufen von Daten und Daten in anderen Klassen zeigt.

Hope wird es hilfreich sein!

@ Antwort Axel22 der ist der Schlüssel, aber es gibt ein paar andere Dinge aus dem Code fehlt. Zunächst sollten Sie entweder BaseAdapter oder ArrayAdapter werden erstrecken, je nach Ihren Wünschen. Zweitens wollen Sie in der Praxis bekommen ViewHolder der Verwendung von übermäßigen Anrufen findViewById wird, zu vermeiden und (vor allem) Recycling Ihre Ansicht.

private Class ViewHolder {
  public TextView cityControl;
  public TextView temperatureControl;
  public ImageView skyControl;
  public ViewHolder(TextView cityControl, TextView temperatureControl, ImageView skyControl) {
    this.cityControl = cityControl;
    this.temperatureControl = temperatureControl;
    this.skyControl = skyControl;
  }

Ihre getView Funktion kann Ansichten recycelt und die ViewHolder Klasse verwendet wie folgt:

public View getView(int position, View convertView, ViewGroup parent) { 
    Weather weather = weatherList.get(position);
    // This is how you attempt to recycle the convertView, so you aren't 
    // needlessly inflating layouts.
    View v = convertView;
    ViewHolder holder;
    if (null == v) {
        v = LayoutInflater.from(getContext()).inflate(R.layout.weather_row, parent, false);
        TextView cityControl = (TextView)v.findViewById( R.id.city );
        TextView temperatureControl = (TextView)v.findViewById( R.id.temperature );
        ImageView skyControl = (ImageView)v.findViewById( R.id.sky );
        holder = new ViewHolder(cityControl, temperatureControl, skyControl);
        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }

    holder.cityControl.setText("Metropolis");
    holder.temperatureControl.setText("78");
    holder.skyControl.setImageResource(R.drawable.daily_planet);

    return v;

}

Für jede weitere Beispiele (und andere Optimierungstipps) finden Sie unter dieses Blog-Post (oder nur google für ViewHolder).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top