- Forum-Beiträge: 650
19.07.2022, 20:55:11 via Website
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
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.