- Forum-Beiträge: 609
11.12.2021, 22:40:31 via Website
11.12.2021 22:40:31 via Website
Hallo zusammen
Ich habe ein Adapter mit Checkboxen.
<?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" />
und in der MainActivity
private ListView list_vor;
private VorAdapter adapter_vor;
list_vor = (ListView) findViewById(R.id.lisv_vor);
adapter_vor = new VorAdapter(ctx, 0);
list_vor.setAdapter(adapter_vor);
adapter_vor.notifyDataSetInvalidated();
Ich möchte dass sich die Checkbox ändert wenn ich sie Anklicke. Aus mir unerfindlichen Grund wird die OnItemclickListener nicht durchlaufen.
list_vor.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckBox objekt = (CheckBox) view;
objekt.setChecked(!objekt.isChecked());
}
});
Sieht jemand was ich falsch mache?
Der Vollständigkeitshalber stelle ich noch den Code von meiner MainActivity hin.
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.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;
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öniz und den Advent
*
* @autor robbisoft @version 6.12.2021
* @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.isDreikonig(jetzt) ){
tbar.setBackgroundColor(Color.WHITE);
tbar.setTitle(getResources().getString(R.string.lbl_konig));
}
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();
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));
}
}
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);
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);
return true;
}
default: return super.onOptionsItemSelected(item);
}
}
@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);
}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();
}
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case 1 : {
if(resultCode == Activity.RESULT_OK){
//Neuer Optionenaufruf
optionen = laden();
listebauen();
}
return;
}
case 2 : {
if (resultCode == Activity.RESULT_OK){
//Zurück vom Termineintragen
return;
}
}
case 3 : {
if(resultCode == Activity.RESULT_OK) {
try{
if(data != null) {
String str_datum, str_text;
str_datum = data.getStringExtra("datum");
str_text = data.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;
}
return;
}
}
}
/**********************************************************************************************
* 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;
}
}
}
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.