In der vorherigen Aktivität verlorene Werte, wenn ich die Schaltfläche "Zurück" drückte, aber nicht, wenn this.finish () aufgerufen wird
Ich habe also ein komisches Problem. Ich habe 2 Aktivitäten, an denen ich arbeite. Eine der Aktivitäten zeigt eine ListView an, deren Daten über ein langes Extra erfasst werden, das ich verwende, um die Ergebnisse über eine WHERE-Klausel in der database.query abzurufen. Die andere Aktivität wird aufgerufen, wenn auf ein ListView-Element geklickt wird, sodass jemand der Datenbank etwas für die ListView hinzufügen kann.
Die Aktivitätsnamen sindDaysActivity.java
(die Aktivität mit der Listenansicht) undDayAddActivity.java
(Die Aktivität, bei der jemand einen Tag hinzufügen kann, der dann in der Liste angezeigt wirdDaysActivity.java
Listenansicht).
Das Problem, das ich habe, ist, wenn ichfinish()
DayAddActivity.java
es geht zurück zuDaysActivity
und die ListView ist immer noch voll besetzt. Allerdings, wenn ich die Zurück-Taste drückeDayAddActivity.java
(Die Schaltfläche links neben dem Titel in der Aktionsleiste mit dem Symbol für meine App). Wenn Sie zu DaysActivity.java zurückkehren, ist die ListView leer / verschwunden.
Hier ist der Code für beide:
DaysActivity.java:
package com.gauvion.gfit;
import android.annotation.SuppressLint;
import android.app.ListActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class DaysActivity extends ListActivity {
private DaysDataSource datasource;
private SimpleCursorAdapter dataAdapter;
private boolean isEditing = false;
private Toast toast_deleted;
private String[] columns = new String[] { MySQLiteHelper.COLUMN_NAME, MySQLiteHelper.COLUMN_DAY };
private int[] to;
private long routineDataID;
private String routineDataName;
@SuppressLint("ShowToast")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_days);
routineDataID = getIntent().getLongExtra("routineDataID", 0);
routineDataName = getIntent().getStringExtra("routineDataName");
setTitle(routineDataName);
toast_deleted = Toast.makeText(this, "", Toast.LENGTH_SHORT);
datasource = new DaysDataSource(this);
datasource.open();
Cursor cursor = datasource.fetchAllDays(routineDataID);
to = new int[] { R.id.listitem_day_name, R.id.listitem_day_day };
dataAdapter = new SimpleCursorAdapter(this, R.layout.listitem_day, cursor, columns, to, 0);
setListAdapter(dataAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_days, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Cursor cursor = datasource.fetchAllDays(routineDataID);
switch (item.getItemId()) {
case R.id.button_days_add:
Intent startDayAdd = new Intent(this, DayAddActivity.class);
startDayAdd.putExtra("routineDataID", routineDataID);
this.startActivity(startDayAdd);
return true;
case R.id.button_days_edit:
to = new int[] { R.id.listitem_day_edit_name, R.id.listitem_day_edit_day };
dataAdapter = new SimpleCursorAdapter(this, R.layout.listitem_day_edit, cursor, columns, to, 0);
setListAdapter(dataAdapter);
isEditing = true;
invalidateOptionsMenu();
return true;
case R.id.button_days_edit_done:
to = new int[] { R.id.listitem_day_name, R.id.listitem_day_day };
dataAdapter = new SimpleCursorAdapter(this, R.layout.listitem_day, cursor, columns, to, 0);
setListAdapter(dataAdapter);
isEditing = false;
invalidateOptionsMenu();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.findItem(R.id.button_days_edit).setVisible(!isEditing);
menu.findItem(R.id.button_days_edit_done).setVisible(isEditing);
return true;
}
@Override
protected void onResume() {
datasource.open();
Cursor cursor = datasource.fetchAllDays(routineDataID);
dataAdapter.changeCursor(cursor);
super.onResume();
}
@Override
protected void onPause() {
datasource.close();
super.onPause();
}
}
DayAddActivity.java:
package com.gauvion.gfit;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import android.support.v4.app.NavUtils;
public class DayAddActivity extends Activity {
private RoutinesDataSource datasource;
private EditText dayName;
private Spinner dayDay;
private Button saveButton;
private long routineDataID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_day_add);
routineDataID = getIntent().getLongExtra("routineDataID", 0);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_day_add, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
public void cancelDay(View view) {
this.finish();
}
}
DascancelDay()
Die Funktion wird aufgerufen, wenn eine Schaltfläche "Abbrechen" angeklickt wirdactivity_day_add.xml
. Wie gesagt, wenn ich auf den "Abbrechen" -Button innerhalb von klickeDayAddActivity.java
geht es zurück zuDaysActivity.java
und die ListView ist in Ordnung. Alle Daten sind da. Wenn ich jedoch die Zurück-Schaltfläche in der Aktionsleiste drücke (die Schaltfläche mit einem Zurück-Pfeil und meinem App-Symbol neben dem Titel der Aktivität), wird die ListView fürDaysActivity.java
ist leer / weg und der Titel ist auch leer (da dies auch durch einen Extra String-Wert erzeugt wird).