
- Forum-Beiträge: 669
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;
}
}
}