Logik in Adapter

  • Antworten:2
  • Forum-Beiträge: 541

19.07.2022, 20:55:11 via Website

Hallo zusammen

Ich möchte in meiner App dem Adapter etwas Logik hinterlegen. Dazu habe ich dem Layout eine Activity angehängt. Doch es will nicht funktionieren. Wenn ich mit dem Debuger durchgehe, wir der Code nicht ausgeführt.

Layout:

<?xml version="1.0" encoding="utf-8"?>

android:id="@+id/lay_vor"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<CheckBox
    android:id="@+id/chkb_vor"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

Activity:

package ch.robbisoft.sakristanhilfe;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;

public class vorbereitung extends AppCompatActivity {

private CheckBox obj_check;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_vor);

    obj_check = findViewById(R.id.chkb_vor);
    obj_check.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CheckBox temp_box;
            temp_box = (CheckBox) view;
            if(temp_box.isChecked()){
                temp_box.setChecked(false);
            }else {
                temp_box.setChecked(true);
            }
        }
    });
}

}

MainActivity:

package ch.robbisoft.sakristanhilfe;

import android.Manifest;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.DatePicker;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class MainActivity extends AppCompatActivity {

String[] rechte = new String[]{
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.READ_EXTERNAL_STORAGE
};
public static final int MULTIPLE_PERMISSIONS = 99;
private String str_text;
private Context ctx;
private Context ac_ctx;
private Toolbar tbar;

private MenuInflater inflater;
private TextView obj_besonders;
private List<Eintrag> besonderes;
private Memory speicher;
private DatePickerDialog dat_dialog;
private Calendar kalender;
private Intent param;
private int n_position;
private SimpleDateFormat alt_dat, neu_dat;

private TerminDaten optionen;

private String str_vor = "";
private String str_nach = "";
private ListView list_vor;
private ListView list_nach;

private VorAdapter adapter_vor;
private NachAdapter adapter_nach;
private List<String> str_list_vor;
private List<String> str_list_nach;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ctx = getApplicationContext();
    ac_ctx = this;
    alt_dat = new SimpleDateFormat(getString(R.string.datum_kurz));
    neu_dat = new SimpleDateFormat(getString(R.string.datum_lang));

    tbar = (Toolbar) findViewById(R.id.tob_main);
    tbar.setTitle(getResources().getString(R.string.lbl_sakristan));
    tbar.inflateMenu(R.menu.main_menu);
    setSupportActionBar(tbar);
    optionen = laden();

    FestTage festtage;
    festtage = new FestTage();

    //macht das die Tastatur nicht gliech angezeigt wird
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

    speicher = new Memory(ctx);
    list_vor = (ListView) findViewById(R.id.lisv_vor);
    obj_besonders = (TextView) findViewById(R.id.txt_besonderes);
    list_nach = (ListView) findViewById(R.id.lisv_nach);

    adapter_vor = new VorAdapter(ctx, 0);
    adapter_nach = new NachAdapter(ctx, 0);

    //prüft ob OS Version > 6 ist, denn vorher kann nicht geprüft werden
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        //prüfen ob Rechte vorhanden sind um auf das Dateisystem zu zugreifen
        if (pruefrechte()) {
            //initialisieren der Oberfläche
            initial();
            listebauen();
        } else {
        }
    }else{
        //initialisieren der Oberfläche
        initial();
        listebauen();
    }
    list_vor.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            CheckBox objekt = (CheckBox) view.findViewById(R.id.chkb_vor);
            objekt.setChecked(!objekt.isChecked());
        }
    });
}

/**********************************************************************************************
 * Erstellt die Adapter Listen für die Vor- und Nachbearbeitung
 *
 * @author robbisoft  @since 2. September 2021
 * @param
 * @return
 * @exception
 * @throws
 **********************************************************************************************/
private void listebauen(){
    str_list_vor = teilestr(str_vor);
    str_list_nach = teilestr(str_nach);

    list_vor.setAdapter(adapter_vor);
    adapter_vor.notifyDataSetInvalidated();
    list_nach.setAdapter(adapter_nach);
    adapter_nach.notifyDataSetInvalidated();
}

private List<String> teilestr(String str_liste){
    List<String> liste = new ArrayList<String>();
    if(!str_liste.isEmpty()) {
        int n_pos = 0;
        String str_pool = "";
        do {
            if(str_liste.charAt(n_pos) != '\n') {
                str_pool += str_liste.charAt(n_pos);
                n_pos++;
            }else{
                liste.add(str_pool);
                n_pos++;
                str_pool = "";
            }
        } while (n_pos < str_liste.length());
        liste.add(str_pool);
    }
    return liste;
}

/**********************************************************************************************
 * Initialisiert die App
 * Erweiterung für den Christ König und den Advent
 * Korrektur der Weiheinachtszeit
 *
 * @autor robbisoft @version 2.1.2022
 * @param
 * @return
 **********************************************************************************************/
private void initial(){
    //Datumermitteln und ausgeben
    Calendar zeitstempel = Calendar.getInstance();
    String str_text = "";

    //Liturgiefarbe setzen
    Date begin = null, end = null, jetzt = null;
    kalender = Calendar.getInstance();
    int n_tag = kalender.get(Calendar.DAY_OF_MONTH);
    int n_monat = kalender.get(Calendar.MONTH);
    int n_jahr = kalender.get(Calendar.YEAR);
    try {
        jetzt = alt_dat.parse(Integer.toString(n_tag) + "." + Integer.toString(n_monat + 1) + "." + Integer.toString(n_jahr));
        kalender.setTime(jetzt);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    FestTage feste = new FestTage();
    if( feste.isNeujahr(jetzt) ){
        tbar.setBackgroundColor(Color.WHITE);
        tbar.setTitle(getResources().getString(R.string.lbl_neujahr));
    }
    //nach Weihnachten

// begin = feste.getNeujahr();
// end = feste.getDreikonig();
// if((jetzt.compareTo(begin) > 0) && (jetzt.compareTo(end) < 0)){
// tbar.setBackgroundColor(Color.WHITE);
// }
if(feste.isZweiNeujahr(jetzt)){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_btag));
}
if( feste.isDreikonig(jetzt) ){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_konig));
}
if(feste.isMariaLicht(jetzt)){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_marialicht));
}
if( feste.isAschermittwoch(jetzt) ){
tbar.setBackgroundColor(Color.MAGENTA);
tbar.setTitle(getResources().getString(R.string.lbl_asche));
}
if( feste.isOstermontag(jetzt) ){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_osterm));
}
if( feste.isAllerheiligen(jetzt) ){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_allerh));
}
if( feste.isAllerseelen(jetzt) ){
tbar.setBackgroundColor(Color.MAGENTA);
tbar.setTitle(getResources().getString(R.string.lbl_allers));
}
//Prüfen auf Fastenzeit
begin = feste.getAschermittwoch();
end = feste.getOstermontag();
if((jetzt.compareTo(begin) >= 0) && (jetzt.compareTo(end) < 0)){
tbar.setBackgroundColor(Color.MAGENTA);
tbar.setTitle(getResources().getString(R.string.lbl_fasten));
if( feste.isPalmsonntag(jetzt) ){
tbar.setBackgroundColor(Color.RED);
tbar.setTitle(getResources().getString(R.string.lbl_palm));
}
if( feste.isGruendonnerstag(jetzt) ){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_gruend));
}
if( feste.isKarfreitag(jetzt) ){
tbar.setBackgroundColor(Color.RED);
tbar.setTitle(getResources().getString(R.string.lbl_karrfrei));
}
if( feste.isOsternacht(jetzt) ){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(R.string.lbl_osternacht);
}
if( feste.isOstern(jetzt) ){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_ostern));
}
}
//Prüfen auf Osterzeit
begin = feste.getOstermontag();
end = feste.getPfingstmontag();
//Prüfen ob das wirklich so Stimmt
if((jetzt.compareTo(begin) > 0) && (jetzt.compareTo(end) < 0)){
tbar.setBackgroundColor(Color.WHITE);
if( feste.isPfingsten(jetzt) ){
tbar.setBackgroundColor(Color.RED);
tbar.setTitle(getResources().getString(R.string.lbl_pfingst));
}
}
if( feste.isPfingstmontag(jetzt) ){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_pingstm));
}
if( feste.isSilvester(jetzt) ){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_silber));
}
if( feste.isChristkonig(jetzt) ){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_christ));
}
//Prüfen auf Advent
begin = feste.getAdventEins();
end = feste.getHeiligabend();
if((jetzt.compareTo(begin) >= 0 )&& (jetzt.compareTo(end) < 0)){
tbar.setBackgroundColor(Color.MAGENTA);
tbar.setTitle(getResources().getString(R.string.lbl_advent));
if( feste.isErsterAdvent(jetzt) ){
tbar.setTitle(getResources().getString(R.string.lbl_advent1));
}
if( feste.isZweiterAdvent(jetzt) ){
tbar.setTitle(getResources().getString(R.string.lbl_advent2));
}
if( feste.isDritterAdvent(jetzt) ){
tbar.setTitle(getResources().getString(R.string.lbl_advent3));
}
if( feste.isVirterAdvent(jetzt) ){
tbar.setTitle(getResources().getString(R.string.lbl_advent4));
}
}
//Prüfe auf Weihnachten
if(feste.isHeiligabend(jetzt)){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_heilabend));
}
if(feste.isWeihnachten(jetzt)){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_weihnacht));
}
if(feste.isStefanstag(jetzt)){
tbar.setBackgroundColor(Color.RED);
tbar.setTitle(getResources().getString(R.string.lbl_stefan));
}

    String str_akt_dat = alt_dat.format(zeitstempel.getTime());
    besonderes = speicher.load();
    try {
        Date akt_dat = alt_dat.parse(str_akt_dat);
        for(Eintrag inhalt : besonderes){
            if( (akt_dat.compareTo(inhalt.dat_datum)) == 0 ){
                str_text += inhalt.str_text + "\n";
            }
        }
    } catch (ParseException e) {
        e.printStackTrace();
        Toast.makeText(ac_ctx, ctx.getResources().getString(R.string.lbl_error) + e.getMessage(), Toast.LENGTH_LONG).show();
    }
    obj_besonders.setText( str_text );
}

@Override
protected void onDestroy() {
    super.onDestroy();
    speichern(optionen);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int n_id = item.getItemId();
    switch ( n_id ){
        case R.id.mnu_eintrag : {
            startActivity(new Intent(ctx, eingabe.class));
            return true;
        }
        case R.id.mnu_suchen : {
            besonderes = speicher.load();
            kalender = Calendar.getInstance();
            int n_jahr = kalender.get(Calendar.YEAR);
            int n_monat = kalender.get(Calendar.MONTH);
            int n_tag = kalender.get(Calendar.DAY_OF_MONTH);
            //Starten vom Datumsdialog
            dat_dialog = new DatePickerDialog(this, dat_horcher, n_jahr, n_monat, n_tag);
            dat_dialog.show();
            return true;
        }
        case R.id.mnu_termin : {
            Intent was = new Intent(ctx, Termin.class);
            was.putExtra("tit", optionen.getTitel());
            was.putExtra("bes", optionen.getBeschrieb());
            was.putExtra("ort", optionen.getOrt());

// startActivityForResult(was, 2);
getTerminResult.launch(was);
return true;
}
case R.id.mnu_fest : {
startActivity(new Intent(ctx, FestTagsKalender.class));
return true;
}
case R.id.mnu_optionen : {
//neue Optionen
Intent opt = new Intent(ctx,SettingsActivity.class);
// startActivityForResult(opt, 1);
getOptResult.launch(opt);
return true;
}
default: return super.onOptionsItemSelected(item);
}
}

ActivityResultLauncher<Intent> getOptResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if(result.getResultCode() == Activity.RESULT_OK){
                    //Neuer Optionenaufruf
                    optionen = laden();
                    listebauen();
                }
            }
        });

ActivityResultLauncher<Intent> getTerminResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if(result.getResultCode() == Activity.RESULT_OK) {
                    //Speichern der Termine!
                }
            }
        });

ActivityResultLauncher<Intent> getWorkResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if(result.getResultCode() == Activity.RESULT_OK){
                    try{
                        Intent inhalt = result.getData();
                        if(inhalt != null) {
                            String str_datum, str_text;
                            str_datum = inhalt.getStringExtra("datum");
                            str_text = inhalt.getStringExtra("text");
                            besonderes.get(n_position).dat_datum = neu_dat.parse(str_datum);
                            besonderes.get(n_position).str_text = str_text;
                            //Speichern der Daten
                            speicher.save(besonderes);
                        }
                    } catch (ParseException e) {
                        e.printStackTrace();
                        Toast.makeText(ac_ctx, ctx.getResources().getString(R.string.lbl_error) + e.getMessage(), Toast.LENGTH_LONG).show();
                    }
                    besonderes.get(n_position).str_text = str_text;
                }
            }
        });

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

private boolean pruefrechte(){
    int result;
    List listPermissionsNeeded = new ArrayList<>();
    for (String p:rechte)
    {
        result = ContextCompat.checkSelfPermission(this,p);
        if (result != PackageManager.PERMISSION_GRANTED)
        {
            listPermissionsNeeded.add(p);
        }
    }
    if (!listPermissionsNeeded.isEmpty())
    {
        ActivityCompat.requestPermissions(this, (String[]) listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),MULTIPLE_PERMISSIONS );
        // keine permissions gesetzt
        return false;
    }
    // alle permissions gesetzt
    return true;
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode)
    {
        case MULTIPLE_PERMISSIONS:
        {
            if (grantResults.length > 0)
            {
                String permissionsDenied = getResources().getString(R.string.lbl_permission);
                for (String per : permissions)
                {
                    if(grantResults[0] == PackageManager.PERMISSION_DENIED)
                    {
                        permissionsDenied += "\n" + per;
                        Toast.makeText(ac_ctx, permissionsDenied, Toast.LENGTH_LONG).show();
                    }
                }
                // Nach dem ersten Male
            }
            return;
        }
    }
}

private DatePickerDialog.OnDateSetListener dat_horcher = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker datePicker, int n_jahr, int n_monat, int n_tag) {
        Date datum;
        try {
            datum = alt_dat.parse(Integer.toString(n_tag) + "." + Integer.toString(n_monat + 1) + "." + Integer.toString(n_jahr));
            kalender.setTime(datum);
            //Datensuchen
            n_position = 0;
            int n_menge = besonderes.size();
            Eintrag inhalt = new Eintrag();
            inhalt.str_text = getResources().getString(R.string.lbl_kein);
            do{
                inhalt = besonderes.get(n_position);
                n_position++;
            }while ((datum.compareTo(inhalt.dat_datum) != 0) && (n_position < n_menge) );
            //eine Position zurücknehmen sonst wird beim ergänzen im falschen Eintrag ergänzt
            n_position--;
            param = new Intent(ctx, work.class);
            param.putExtra("datum", neu_dat.format(datum));
            param.putExtra("text", inhalt.str_text);
            //nur Aufrufen wenn auch was gefunden wurde
            if((datum.compareTo(inhalt.dat_datum) == 0)) {

// startActivityForResult(param, 3);
getWorkResult.launch(param);
}else{
dat_dialog.dismiss();
String str_error = getResources().getString(R.string.lbl_kein);
Log.e("SakristanHilfe", "Text : " + str_error);
Toast.makeText(ac_ctx, str_error, Toast.LENGTH_LONG).show();
}
} catch (ParseException e) {
e.printStackTrace();
Toast.makeText(ac_ctx, ctx.getResources().getString(R.string.lbl_error) + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
};

/**********************************************************************************************
 * Speichert die Optionen mit Manager
 *
 * @author robbisoft  @since 5. Mai 2021
 * @param @Daten der Optionen
 * @return
 * @exception
 * @throws
 **********************************************************************************************/
private void speichern(TerminDaten termindaten){
    //neue Optionen
    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(ctx);
    SharedPreferences.Editor editor = pref.edit();
    editor.putString("key_termin_titel", termindaten.getTitel());
    editor.putString("key_terminbeschrieb", termindaten.getBeschrieb());
    editor.putString("key_terminort", termindaten.getOrt());
    editor.commit();
}

/**********************************************************************************************
 * Liest die Daten für die Optionen mit Manager
 * Optionen für das Anzeigen der Adapter werden mit eingelesen
 *
 * @author robbisoft  @since 2. September 2021
 * @param
 * @return gesamelte Daten der Optionen
 * @exception
 * @throws
 **********************************************************************************************/
private TerminDaten laden(){
    TerminDaten termin = new TerminDaten();
    String str_pool = "";
    //Neue Optionen laden
    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(ctx);
    str_pool = pref.getString("key_termin_titel", "");
    termin.setTitel(str_pool);
    str_pool = pref.getString("key_terminbeschrieb", "");
    termin.setBeschrieb(str_pool);
    str_pool = pref.getString("key_terminort", "");
    termin.setOrt(str_pool);
    //Optionen für Adapter
    str_vor = pref.getString("key_vor", getResources().getString(R.string.lbl_dev_vor));
    str_nach = pref.getString("key_nach", getResources().getString(R.string.lbl_dev_nach));
    return  termin;
}

/**********************************************************************************************
 * Klasse um die Liste der Vorbereitung zu erstellen
 *
 * @author robbisoft  @since 4. September 2021
 * @param
 * @return
 * @exception
 * @throws
 **********************************************************************************************/
class VorAdapter extends ArrayAdapter<String>{

    public VorAdapter(@NonNull Context context, int resource) {
        super(context, resource);
    }

    @Override
    public int getCount() {
        return str_list_vor.size();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView != null){
            CheckBox chkb_obj_vor = (CheckBox) convertView.findViewById(R.id.chkb_vor);
            chkb_obj_vor.setText(str_list_vor.get(position));
        }else{
            convertView = getLayoutInflater().inflate(R.layout.layout_vor, null);
            CheckBox chkb_obj_vor = (CheckBox) convertView.findViewById(R.id.chkb_vor);
            chkb_obj_vor.setText(str_list_vor.get(position));
        }
        return convertView;
    }
}

/**********************************************************************************************
 * Klasse um die Liste der Nachbearbeitung zu erstellen
 *
 * @author robbisoft  @since 4. September 2021
 * @param
 * @return
 * @exception
 * @throws
 **********************************************************************************************/
class NachAdapter extends ArrayAdapter<String>{

    public NachAdapter(@NonNull Context context, int resource) {
        super(context, resource);
    }

    @Override
    public int getCount() {
        return str_list_nach.size();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView != null){
            CheckBox chkb_obj_nach = (CheckBox) convertView.findViewById(R.id.chkb_nach);
            chkb_obj_nach.setText(str_list_nach.get(position));
        }else{
            convertView = getLayoutInflater().inflate(R.layout.layout_nach, null);
            CheckBox chkb_obj_nach = (CheckBox) convertView.findViewById(R.id.chkb_nach);
            chkb_obj_nach.setText(str_list_nach.get(position));
        }
        return convertView;
    }
}

}

Ich bin mir nicht sicher, ob ich nicht auf dem falschen Pferd sitze. Kann ich einem Adapter logik hinterlegen? Fals ja wie muss man das machen.

Gruss Renato

Kommentieren
  • Forum-Beiträge: 1.487

21.07.2022, 05:36:25 via Website

Ohe den code angesehen zu haben. Wäre es sinnvoll zu sagen was du erwartest was du machen willst oder was genau nicht geht.

Hilfreich?
Kommentieren
  • Forum-Beiträge: 541

21.07.2022, 19:58:11 via Website

Ciao Jokel

Du hast Recht. Entschuldige.

Also die Idee mit der Activity funktioniert nicht. Aber ich habe im Internet was gefunden.

list_nach.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            CheckBox objekt = (CheckBox) view;
            objekt.setChecked(!objekt.isChecked());
        }
    });

Ich habe den Code implementiert. Leider tut sich immer noch nichts. Wenn ich mit dem Debugger ein Breakpoint setze wird der Code nicht ausgeführt. Irgend wie kommt das Programm dort nicht vorbei.

Das eigentliche Problem ist folgendes. Ich habe ein Adapter mit CheckBoxen. Wenn ich eine CheckBox anklicke, dann wird der Hacken gesetzt. Wenn die Liste länger ist als der Bildschirm, dann wird nicht nur der Aktuelle Checkbox aktiviert. Der erste Eintrag im unsichtbaren Bereich ist dann ebenfalls aktiv. Wenn ich nun nach oben scrolle um den Hacken wieder zu entfernen. Dann ist der obere Hacken ebenfalls wieder verschwunden.
Darum suche ich eine Möglichkeit, dass im Adapter immer nur der aktuelle Hacken gesetzt wird.

Gruss Renato

Hilfreich?
Kommentieren