Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich bin nun endlich von nem Scrollview auf ne ListView umgestiegen weil mir das hier mal empfohlen wurde. Ich habe eine Liste mit TableRows. In diesem TableRow liegen mehrere textboxen, ein image und eine Checkbox. ich habe also pro Eintrag eine Checkbox. Nun habe ich das Problem, dass wenn ich durch meine z.Z. 90 Einträge scrolle und einen Eintrag anhake, dass dann jeder 3. Eintrag nen Haken hat. Und wenn ich nen anderen eintrag anhake dann hat auch jeder 3. Eintrag nen Hacken. Sprich, wenn ich die aller ersten 3 Einträge anhake, sind plötzlich ALLE Einträge angehakt... Hat jemand ne Idee woran das liegen könnte? Kennt das jemand?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.galerie);
filme = new ArrayList<Film>();
DatensaetzeLaden();
Collections.sort(filme, new SortierNachName());
ListAdapter boxAdapter = new FilmeAdapter(this, filme);
// Get reference to ListView holder
ListView lv = (ListView) this.findViewById(R.id.galerieeintraege);
// Set the ListView adapter
lv.setAdapter(boxAdapter);
}
ListViewAdapter.java
Java:
package com.example.barcodescanningapp;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;
public class ListViewAdapter extends ArrayAdapter<Film> {
private static final String tag = "ListViewAdapter";
private static final String ASSETS_DIR = "images/";
private Context context;
private ImageView filmIcon;
private TextView filmName;
private TextView filmBeschreibung;
private TextView filmGenre;
private RatingBar filmBewertung;
private List<Film> filme = new ArrayList<Film>();
File root = android.os.Environment.getExternalStorageDirectory();
public ListViewAdapter(Context context, int textViewResourceId,
List<Film> objects) {
super(context, textViewResourceId, objects);
this.context = context;
this.filme = objects;
}
public int getCount() {
return this.filme.size();
}
public Film getItem(int index) {
return this.filme.get(index);
}
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
// ROW INFLATION
Log.d(tag, "Starting XML Row Inflation ... ");
LayoutInflater inflater = (LayoutInflater) this.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.eintrag, parent, false);
Log.d(tag, "Successfully completed XML Row Inflation!");
}
// Get item
Film film = getItem(position);
// Get reference to ImageView
filmIcon = (ImageView) row.findViewById(R.id.imgBild);
filmName = (TextView) row.findViewById(R.id.txtName);
filmBeschreibung = (TextView) row.findViewById(R.id.txtBeschreibung);
filmGenre = (TextView) row.findViewById(R.id.txtGenre);
filmBewertung = (RatingBar) row.findViewById(R.id.rdbBewertung);
filmName.setText(film.getName());
filmBeschreibung.setText(film.getBeschreibung());
filmGenre.setText(film.getGenre());
filmBewertung.setRating(film.getBewertung());
filmBewertung.setEnabled(false);
if(film.getStrichcode() != null)
{
File anzeigebild = new File(root.getAbsolutePath() + "/mnt/sdcard/FilmBilder/" + film.getStrichcode() + ".jpg");
if(anzeigebild.exists())
filmIcon.setImageBitmap(BitmapFactory.decodeFile(anzeigebild.getAbsolutePath()));
}
return row;
}
}
Nach einiger Zeit mal eine kleine Antwort. Rein vom code her kann ich das Problem nicht sehen, aber ich vermute, das du hier mit dem Fokus herum spielen musst. Vor einiger Zeit gab es hier im forum schon mal ein ähnliches Problem. Ich glaube, der ListView schluckt die events. Ich rate dir mal danach zu suchen.
Nach einiger Zeit mal eine kleine Antwort. Rein vom code her kann ich das Problem nicht sehen, aber ich vermute, das du hier mit dem Fokus herum spielen musst. Vor einiger Zeit gab es hier im forum schon mal ein ähnliches Problem. Ich glaube, der ListView schluckt die events. Ich rate dir mal danach zu suchen.
ohne mir jetzt den Code genau angeschaut zu haben etwas generelles: Was dzim meint, ist, dass es bei der Verwendung von ListView zu Problemen kommen kann, wenn sich innerhalb der ListView andere Views befinden, die Fokus erhalten können. Das sind z.B. EditText, CheckBox, RadioButton oder im Prinzip jede View, die clickable="true" ist.
Das liegt daran, dass ListView standardmäßig onListItemClick und onListItemLongClick listener bereitstellt. Kann ein anderes Elemente innerhalb einer ListView angeklickt werden/den Fokus erhalten, dann ergibt sich folgendes Problem: Woher soll ListView wissen, ob jetzt beispielsweise ein Haken in der CheckBox gesetzt werden soll oder onListItem(Long)Click (die sich beide auf die ganze ListView Reihe beziehen) bedient werden soll?
Daher die Anregung, mit dem Fokus zu experimentieren.
Ein paar Dinge, die mir beim überfliegen des Codes aufgefallen sind:
a) Deine Activity sollte ListActivity erweitern
Code:
extends ListActivity
, dann kannst Du in onCreate
Code:
setListAdapter(mAdapter);
benutzen und musst nicht über findViewById gehen (was evtl auch unsauber ist?).
b) In onCreate setzt Du FilmeAdapter als Adapter, postest aber hier den QuellCode für ListViewAdapter, der laut Quellcode nicht benutzt wird?
Veränderst/setzt Du irgendwo eigene Listener für Deine Checkboxen?