Hallo Leute,
ich versuche mich seit einiger Zeit an der Android Programmierung und habe jetzt ein Problem, bei dem ich nicht weiter weiß. Ich versuche eine Applikation zu erstellen, bei der ich sozusagen die Teilnahme von Spielern meines Sportvereins dokumentiere.
Ich habe eine Datenbank, in der alle Spielernamen als einzelne Tabelle gespeichert sind. Durch ein Custom listView Adapter habe ich als ListView Item eine View, die aus einem Bild, einem Name und 3 Radio Buttons besteht (RB: Anwesend, Entschuldigt, Unentschuldigt).
Nun habe ich mir gedacht, lege eine globale ArrayList an, die den Status aus der DB ausließt bzw dann auch schreibt. Der Status ist ein Integer der jeweils für einen selektierten Radio Button steht. Nun passen auf meinem Bildschirm 7 Einträge rauf. Wenn ich einen Eintrag bearbeite, d.h. ein RadioButton selektiere und runterscrolle, wird "das Muster" vom 1.-7. Eintrag auf die 8.-14. übernommen, da ja alles neu geladen wird.
Jetzt ist nur mein Problem, ich hab gar kein Plan, wie ich diese Sache behebe und sitze schon so lange dran, dass ich wahrscheinlich den Wald vor lauter Bäumen nicht sehe. Könntet ihr mal drüber schauen und mir Tipps geben, wie ich dieses neu laden verhindern kann bzw. die richtigen Werte anzeige?
Wichtige Variablen:
ArrayList<String> spielernamen; //spielernamen = tabellenname für SQL Tabelle
ArrayList<Integer> statusGesamt; //Speichert global den Status, Reihenfolge analog zu spielernamen
In dieser Datei wird die ListView angezeigt:
String datum;
sql db;
ArrayList<String> spielernamen;
ArrayList<spielerdaten> spielerdatenarray = new ArrayList<spielerdaten>();
ListView listView;
ArrayList<Integer> statusGesamt = new ArrayList<Integer>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_training_eintragen);
db = new sql(this);
listView = (ListView) findViewById(R.id.listView4);
// 1. Datum der Trainingseinheit übergeben bekommen
datum = getIntent().getExtras().getString("date");
setTitle(datum);
// 2. Alle Spieler rausfiltern
spielernamen = db.getPlayer();
//setTitle(String.valueOf(spielernamen.size()));
for (int i = 0; i < spielernamen.size(); i++){
spielerdatenarray.add(new spielerdaten(this, spielernamen.get(i)));
}
// 3. Überprüfen aller Spieler, ob dieses Training in Tabelle vorhanden ist, wenn nicht dann anlegen
ArrayList<String> trainings = db.getTrainings();
for (int i = 0; i < spielernamen.size(); i++){
for (int y = 0; y < trainings.size(); y++) {
db.createTrainingIfNotExist(spielernamen.get(i), trainings.get(y));
}
}
// 4. Status aller Spieler für dieses Training ermitteln
for (int i = 0; i < spielernamen.size(); i++){
statusGesamt.add(db.getStatus(datum, spielernamen.get(i)));
}
// 5. Custom ListView aufbauen
SpielerListViewAdapter adapter = new SpielerListViewAdapter(getApplicationContext(), R.layout.layout_spielerlistview);
listView.setAdapter(adapter);
for (int i = 0; i < spielernamen.size(); i++){
int status;
status = statusGesamt.get(i);
SpielerListViewObjekt objekt = new SpielerListViewObjekt(spielerdatenarray.get(i).getFoto(),spielernamen.get(i), statusGesamt.get(i), datum);
adapter.add(objekt);
}
// 6. OnClickListener erstellen
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String name = (String) ((TextView) listView.getChildAt(position).findViewById(R.id.name)).getText();
Boolean A = (Boolean) ((RadioButton) listView.getChildAt(position).findViewById(R.id.A)).isChecked();
Boolean E = (Boolean) ((RadioButton) listView.getChildAt(position).findViewById(R.id.E)).isChecked();
Boolean UE = (Boolean) ((RadioButton) listView.getChildAt(position).findViewById(R.id.UE)).isChecked();
int statusList;
if (A == true)
{
statusList=1;
}else if (E == true)
{
statusList=2;
}else if (UE == true)
{
statusList=3;
}else{
statusList=0;
}
statusGesamt.set(position,statusList);
}
});
}
Alles anzeigen
Das ist mein Adapter:
public class SpielerListViewAdapter extends ArrayAdapter {
// Globale Variablen
List list=new ArrayList();
sql db = null;
int status;
String datum;
String tabellenname;
String pfad;
Context con=null;
public SpielerListViewAdapter(Context context, int resource){
super(context, resource);
con=context;
db = new sql(context);
}
// UI Objekte aus layout_spielerlistview
public static class DataHandler{
public ImageView bild;
public TextView name;
public RadioButton UE;
public RadioButton E;
public RadioButton A;
}
public void add(Object object){
super.add(object);
list.add(object);
}
@Override
public int getCount(){
return this.list.size();
}
@Override
public Object getItem(int position) {
return this.list.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row;
row=convertView;
final DataHandler handler;
final SpielerListViewObjekt listViewObjekt;
// Daten aus dem Objekt erhalten
listViewObjekt=(SpielerListViewObjekt)this.getItem(position);
status = listViewObjekt.getStatus();
tabellenname = listViewObjekt.getName();
datum = listViewObjekt.getDatum();
//Bild anzeigen
pfad = listViewObjekt.getFoto();
if(convertView==null)
{
LayoutInflater inflater=(LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=inflater.inflate(R.layout.layout_spielerlistview,parent,false);
handler=new DataHandler();
//Übergabe der Anzeigedaten
/*
* AB HIER WEITER ARBEITEN
*
*
* */
handler.bild =(ImageView)row.findViewById(R.id.foto);
handler.name=(TextView)row.findViewById(R.id.name);
handler.UE=(RadioButton)row.findViewById(R.id.UE);
handler.E=(RadioButton)row.findViewById(R.id.E);
handler.A=(RadioButton)row.findViewById(R.id.A);
row.setTag(handler);
}
else {
handler=(DataHandler)row.getTag();
}
//Name des Spielers setzen
handler.name.setText(listViewObjekt.getName());
//Ausgangsstellung der Checkboxen
if (status == 1)
{
handler.A.setChecked(true);
}
if (status == 2)
{
handler.E.setChecked(true);
}
if (status == 3)
{
handler.UE.setChecked(true);
}
//Bild anzeigen
File imgFile = new File(String.valueOf(pfad));
if(imgFile.exists()){
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
handler.bild.setImageBitmap(myBitmap);
}
/*
//On Click Listener auf Bild
handler.bild.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.A.setChecked(false);
handler.UE.setChecked(false);
handler.E.setChecked(false);
}
});*/
return row;
}
}
Alles anzeigen
Das ist das Objekt:
public class SpielerListViewObjekt {
private String foto;
private String Name;
private int status;
private String Datum;
public SpielerListViewObjekt(String mFoto, String mName, int mStatus, String mDatum){
foto = mFoto;
Name = mName;
status = mStatus;
Datum = mDatum;
}
public String getFoto() {
return foto;
}
public void setFoto(String foto) {
this.foto = foto;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getDatum() {
return Datum;
}
public void setDatum(String Datum) {
this.Datum = Datum;
}
}
Alles anzeigen
Wenn Ihr mir helfen könntet, wäre ich euch sehr sehr dankbar!
Beste Grüße
Marcel