Как сохранить значения первого действия и увидеть их при переключении со второго действия на первое
Я ввел некоторый текст в текстовые поля на первом занятии.
Затем, нажав кнопку "Сохранить", я перехожу ко второму виду деятельности.
Теперь, после нажатия кнопки "НАЗАД", я возвращаюсь к первому действию, когда я не могу увидеть значения / текст, которые я ввел ранее.
Я пытался использовать общие настройки также.
Вот мой код
MainActivity.java
package com.example.madhur.intentclear;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText tv1 = findViewById(R.id.editText);
final EditText tv2 = findViewById(R.id.editText2);
final EditText tv3 = findViewById(R.id.editText3);
final Button bt1 = findViewById(R.id.button);
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences sharedPreferences1=getSharedPreferences("value1",Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences1.edit();
editor.putString("tv1",tv1.getText().toString());
SharedPreferences sharedPreferences2=getSharedPreferences("value2",Context.MODE_PRIVATE);
SharedPreferences.Editor editor2=sharedPreferences2.edit();
editor2.putString("tv2",tv2.getText().toString());
SharedPreferences sharedPreferences3=getSharedPreferences("value3",Context.MODE_PRIVATE);
SharedPreferences.Editor editor3=sharedPreferences3.edit();
editor3.putString("tv3",tv3.getText().toString());
editor.apply();
editor2.apply();
editor3.apply();
tv1.setText(String.valueOf(sharedPreferences1.getString("tv1",null)));
tv2.setText(String.valueOf(sharedPreferences2.getString("tv2",null)));
tv3.setText(String.valueOf(sharedPreferences3.getString("tv3",null)));
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
intent.putExtra("tv1",tv1.getText().toString());
intent.putExtra("tv2",tv2.getText().toString());
intent.putExtra("tv3",tv3.getText().toString());
startActivity(intent);
}
});
}
}
Main2Activity.java
package com.example.madhur.intentclear;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.FileOutputStream;
import java.io.IOException;
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
final TextView tv1=findViewById(R.id.textView);
final TextView tv2=findViewById(R.id.textView2);
final TextView tv3=findViewById(R.id.textView3);
Button button=findViewById(R.id.button);
Button button1=findViewById(R.id.button1);
Button button2=findViewById(R.id.button2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bundle intent=getIntent().getExtras();
tv1.setText(intent.getString("tv1"));
tv2.setText(intent.getString("tv2"));
tv3.setText(intent.getString("tv3"));
}
});
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String clear="";
tv1.setText(clear);
tv2.setText(clear);
tv3.setText(clear);
m1();
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent1=new Intent(Main2Activity.this,MainActivity.class);
startActivity(intent1);
}
});
}
public void m1()
{String clear="";
try {
FileOutputStream fileOutputStream;
FileOutputStream fileOutputStream2;
FileOutputStream fileOutputStream3;
fileOutputStream = openFileOutput("et1.txt", Context.MODE_PRIVATE);
fileOutputStream.write(clear.getBytes());
fileOutputStream2 = openFileOutput("et2.txt", Context.MODE_PRIVATE);
fileOutputStream2.write(clear.getBytes());
fileOutputStream3 = openFileOutput("et3.txt", Context.MODE_PRIVATE);
fileOutputStream3.write(clear.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.madhur.intentclear.MainActivity">
<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.13" />
<android.support.constraint.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.87" />
<android.support.constraint.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.06" />
<android.support.constraint.Guideline
android:id="@+id/guideline4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.18" />
<android.support.constraint.Guideline
android:id="@+id/guideline5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.29" />
<android.support.constraint.Guideline
android:id="@+id/guideline6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.43" />
<android.support.constraint.Guideline
android:id="@+id/guideline7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.58" />
<android.support.constraint.Guideline
android:id="@+id/guideline8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.73" />
<android.support.constraint.Guideline
android:id="@+id/guideline9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.82" />
<android.support.constraint.Guideline
android:id="@+id/guideline10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.95" />
<android.support.constraint.Guideline
android:id="@+id/guideline11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.24" />
<android.support.constraint.Guideline
android:id="@+id/guideline12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.77" />
<EditText
android:id="@+id/editText"
android:layout_width="0dp"
android:layout_height="0dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="Enter name"
app:layout_constraintBottom_toTopOf="@+id/guideline4"
app:layout_constraintEnd_toStartOf="@+id/guideline2"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintTop_toTopOf="@+id/guideline3" />
<EditText
android:id="@+id/editText2"
android:layout_width="0dp"
android:hint="Enter phone number"
android:layout_height="0dp"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toTopOf="@+id/guideline6"
app:layout_constraintEnd_toStartOf="@+id/guideline2"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintTop_toTopOf="@+id/guideline5" />
<EditText
android:id="@+id/editText3"
android:layout_width="0dp"
android:hint="Enter Email Adress"
android:layout_height="0dp"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toTopOf="@+id/guideline8"
app:layout_constraintEnd_toStartOf="@+id/guideline2"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintTop_toTopOf="@+id/guideline7" />
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="SAVE"
app:layout_constraintBottom_toTopOf="@+id/guideline10"
app:layout_constraintEnd_toStartOf="@+id/guideline12"
app:layout_constraintStart_toStartOf="@+id/guideline11"
app:layout_constraintTop_toTopOf="@+id/guideline9" />
</android.support.constraint.ConstraintLayout>
activity_Main2.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.madhur.intentclear.Main2Activity">
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/guideline16"
app:layout_constraintEnd_toStartOf="@+id/guideline13"
app:layout_constraintStart_toStartOf="@+id/guideline14"
app:layout_constraintTop_toTopOf="@+id/guideline15" />
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/guideline19"
app:layout_constraintEnd_toStartOf="@+id/guideline13"
app:layout_constraintStart_toStartOf="@+id/guideline14"
app:layout_constraintTop_toTopOf="@+id/guideline20" />
<TextView
android:id="@+id/textView3"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/guideline17"
app:layout_constraintEnd_toStartOf="@+id/guideline13"
app:layout_constraintStart_toStartOf="@+id/guideline14"
app:layout_constraintTop_toTopOf="@+id/guideline18" />
<android.support.constraint.Guideline
android:id="@+id/guideline13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="249dp" />
<android.support.constraint.Guideline
android:id="@+id/guideline14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.33854166" />
<android.support.constraint.Guideline
android:id="@+id/guideline15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.031311154" />
<android.support.constraint.Guideline
android:id="@+id/guideline16"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.13" />
<android.support.constraint.Guideline
android:id="@+id/guideline17"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.38" />
<android.support.constraint.Guideline
android:id="@+id/guideline18"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.29" />
<android.support.constraint.Guideline
android:id="@+id/guideline19"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.26" />
<android.support.constraint.Guideline
android:id="@+id/guideline20"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.16" />
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="52dp"
android:text="SHOW TEXT"
app:layout_constraintEnd_toStartOf="@+id/guideline13"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@+id/guideline14"
app:layout_constraintTop_toTopOf="@+id/guideline17" />
<Button
android:id="@+id/button1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="44dp"
android:text="CLEAR TEXT"
app:layout_constraintEnd_toStartOf="@+id/guideline13"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@+id/guideline14"
app:layout_constraintTop_toBottomOf="@+id/button" />
<Button
android:id="@+id/button2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:text="BACK"
app:layout_constraintEnd_toStartOf="@+id/guideline13"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@+id/guideline14"
app:layout_constraintTop_toBottomOf="@+id/button1" />
</android.support.constraint.ConstraintLayout>
2 ответа
Использовать Bundle saveInstanceState в onCreate
SaveInstanceState является ссылкой на объект Bundle, который передается в метод onCreate каждого Android Activity
, В особых случаях действия могут восстанавливать свое прежнее состояние, используя данные, хранящиеся в этом пакете. Если нет доступных данных экземпляра, saveInstanceState будет нулевым.
Например, saveInstanceState всегда будет нулевым при первом запуске Activity, но может быть ненулевым, если Activity уничтожается во время вращения.
Когда я сохраняю вещи в Bundle?
Все действия имеют метод onSaveInstanceState, который можно переопределить. Когда вызывается этот метод, все связанные с состоянием данные должны быть помещены в OutState Bundle. Этот метод вызывается, когда действие выполняется в фоновом режиме (либо после onPause() или onStop(), в зависимости от различных факторов).
Что должно быть сохранено?
Пакет saveInstanceState должен сохранять только информацию, непосредственно связанную с текущим состоянием Активности. Примеры этого включают в себя:
Типичным примером являются данные, отправленные пользователем. Если пользователь записывает свое имя пользователя в текстовое поле, он может ожидать, что имя пользователя все еще будет присутствовать при возобновлении действия. Эти данные должны быть сохранены в onSaveInstanceState, а затем восстановлены при повторном создании действия.
В вашей функции onCreate этот пакет возвращается программе. Лучший способ проверить, перезагружается ли приложение или запускается впервые:
if (savedInstanceState != null) {
// Then the application is being reloaded
}
Чтобы вернуть данные, используйте функции get *, как и функции put *. Данные хранятся в виде пары имя-значение. Это похоже на хэш-карту. Вы предоставляете ключ и значение, затем, когда вы хотите вернуть значение, вы даете ключ, и функция получает значение. Вот короткий пример.
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("message", "This is my message to be reloaded");
super.onSaveInstanceState(outState);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
String message = savedInstanceState.getString("message");
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
// Продвижение локальной переменной в поле
public class Main2Activity extends AppCompatActivity {
private TextView tv1;
private TextView tv2;
private TextView tv3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
tv1 = (TextView) findViewById(R.id.textView);
tv2 = (TextView) findViewById(R.id.textView2);
tv3 = (TextView) findViewById(R.id.textView3);
...
}
}
Используйте общие предпочтения для хранения значений временно / постоянно
ИЗДАНО Извините, я не видел код после увиденного кода.
Ваши значения настроек внутри onlCick
снова. Вы установили значения за пределами onClick
Решение
Создать один глобальный SharedPreferences
с MODE_PRIVATE
установить значения onClick
и читать значения на onCreate
(вне onClick
).