Member 12936995 Ответов: 3

Как я могу сделать значения в textview статическими я имею в виду появляться в действии Каждый раз когда я закрываю и открываю приложение


Привет,
Я создаю и android-программу, в которой edittext принимает входное значение и помещает его в textview после нажатия на кнопку Сохранить. Я использовал sharedpreferences, чтобы сохранить значения и установить их на количество текстовых просмотров один за другим по порядку, но они исчезают после закрытия приложения и не появляются при открытии приложения, я очень новичок в этой области программирования.

Что я уже пробовал:

public class MainActivity extends AppCompatActivity {
   int i = 0;
    SharedPreferences sf;
    final String preferences = "pref";
    final String saveIt = "savekey";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView tv1,tv2,tv3;
         tv1 = (TextView)findViewById(R.id.textView);
        tv2 = (TextView)findViewById(R.id.textView2);
        tv3 = (TextView)findViewById(R.id.textView3);
        final EditText et = (EditText)findViewById(R.id.edittext);
        Button button = (Button)findViewById(R.id.button);
        sf = getSharedPreferences(preferences, Context.MODE_PRIVATE);

                tv1.setText(sf.getString(saveIt, ""));


                tv2.setText(sf.getString(saveIt, ""));



                tv3.setText(sf.getString(saveIt, ""));
                



        tv1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                i = 0;
            }
        });
        tv2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                i = 1;
            }
        });
        tv3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                i = 2;
            }
        });
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String store = et.getText().toString();
                sf = getSharedPreferences(preferences, Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = sf.edit();
                editor.putString(saveIt, store);
                editor.apply();
                switch (i){
                    case 0:
                        tv1.setText(sf.getString(saveIt, ""));
                        et.setText(" ");
                        break;
                    case 1:
                        tv2.setText(sf.getString(saveIt, ""));
                        et.setText(" ");
                        break;
                    case 2:
                        tv3.setText(sf.getString(saveIt, ""));
                        et.setText(" ");
                        break;
                }
            }
        });

    }
}


мой xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.kalla.monu.strings.MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:id="@+id/edittext" />

    <TextView
        android:text="TextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:layout_alignStart="@+id/textView"
        android:layout_marginStart="30dp"
        android:layout_marginTop="49dp"
        android:id="@+id/textView2"
        android:background="@android:color/holo_blue_bright" />

    <TextView
        android:text="TextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:id="@+id/textView"
        android:layout_below="@+id/edittext"
        android:layout_alignEnd="@+id/edittext"
        android:background="@android:color/darker_gray" />

    <Button
        android:text="Button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:text="TextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView3"
        android:background="@android:color/holo_blue_light"
        android:layout_centerVertical="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

3 Ответов

Рейтинг:
1

Peter Leow

Похоже, в вашем коде не было никаких проблем. Чтобы убедить себя, я проверил его на AVD, и вердикт таков: он работает нормально.
++ + + + [раунд 2]+++++

Цитата:
при закрытии приложения нажатием кнопки home и открытии приложения экземпляр сохранен, сохраненные значения появляются, но при закрытии приложения нажатием кнопки back и открытии приложения значения возвращаются к значениям по умолчанию. текстовые значения установлены в hi, hello, howru с кнопкой home да, я вижу их при открытии, но с кнопкой back они устанавливаются по умолчанию

Вы должны были упомянуть об этом раньше. Это очень отличается от вашего первоначального вопроса, который предполагал, что вообще ничего не работает.
Все сводится к разнице в поведении между кнопкой "Домой" и кнопкой "Назад".
Нажатие кнопки Home остановит и переместит текущую активность в фоновый режим, а система все еще сохраняет свое состояние, вы возвращаете то, что было остановлено при возобновлении.
Что касается кнопки "назад", то это совсем другая история, текущая активность уничтожена. Поэтому, когда вы снова запускаете его, он начинает все сначала с Hello world по умолчанию в edit text и заполняет три текстовых представления ранее сохраненными предпочтениями, как указано в onCreate () вашего кода.
Он делает именно то, что вы закодировали.
Слушать Ричард, читать на жизненный цикл активности Андроид.


Member 12936995

Спасибо Питеру за тестирование, но моя реальная проблема заключается в том,что я запускаю приложение на устройстве, и когда закрываю приложение нажатием кнопки home и открываю приложение, экземпляр сохраняется, сохраненные значения появляются, но когда закрываю приложение нажатием кнопки back и открываю приложение, значения возвращаются к значениям по умолчанию. текстовые значения установлены в hi, hello, howru с кнопкой home да, я вижу их при открытии, но с кнопкой back они устанавливаются по умолчанию

Peter Leow

ответ добавил к моему решению.

Richard MacCutchan

+5 за дополнительные (важные) детали.

Рейтинг:
1

Member 12941040

Я видел, как это упомянуто в решение для подобной задачи и применили его студия Android 2.2, это автоматическое завершение слов


Member 12941040

Привет Ричард ,моя проблема еще не решена, пожалуйста, помогите мне

Richard MacCutchan

Перейдите по ссылке, которую я дал вам выше, и внимательно изучите. Вам просто нужно поместить свой код сохранения и восстановления в правильные места.

wseng

пожалуйста, напишите это как комментарий, а не ответ

Рейтинг:
0

Richard MacCutchan

Как и Питер, я протестировал его, и он работает нормально. Я думаю, что то, что вы видите, - это эффект приложения, которое получает Paused но не остановился полностью, поэтому, когда вы запускаете его во второй раз, он не проходит через свой OnCreate метод, но Resumeс того места, где он был в последний раз остановлен. Вы можете проверить это, запустив приложение, а затем перейдя на домашнюю страницу вашего устройства или эмулятора. Теперь перейдите на страницу Настройки-Приложения и принудительно остановите приложение. Затем запустите его снова, и вы увидите, что изменения распространились на все три текстовых поля. Для полного понимания см. Жизненный Цикл Активности / Разработчики Android[^].


Member 12936995

Спасибо Питеру за тестирование, но моя реальная проблема заключается в том,что я запускаю приложение на устройстве, и когда закрываю приложение нажатием кнопки home и открываю приложение, экземпляр сохраняется, сохраненные значения появляются, но когда закрываю приложение нажатием кнопки back и открываю приложение, значения возвращаются к значениям по умолчанию. текстовые значения установлены в hi, hello, howru с кнопкой home да, я вижу их при открытии, но с кнопкой back они устанавливаются по умолчанию

Richard MacCutchan

Перейдите по ссылке выше и узнайте, как использовать эти функции в жизненном цикле деятельности.

Peter Leow

5ед!

Member 12936995

Извини Ричард я назвал не то имя

Member 12936995

Привет Ричард, спасибо за руководство во время учебы я нашел метод GNState и попытался реализовать его любезно взгляните на мой код, но он не работает для меня


public class MainActivity расширяет AppCompatActivity {
int i = 0;
@GNState
SharedPreferences sf;
@GNState
последней строке Параметры = "прив";
@GNState
последняя строка saveIt = " savekey";
@GNState
частный TextView tv1;
@GNState
частный TextView tv2;
@GNState
частный TextView tv3;

@Ручная коррекция
protected void onCreate(Bundle savedInstanceState) {
super. onCreate(savedInstanceState);
setContentView(R. layout.activity_main);
GNStateManagerFactory.init(это);
// Заполните этот объект объектами поля состояния.
GNStateManagerFactory.вам().извлекать(это);

ТВ1 = (виджет TextView)findViewById, чтобы найти(ИД Р..виджет TextView);
tv2 = (TextView)findViewById(R. id. textView2);
ТВ3 = (виджет TextView)findViewById, чтобы найти(ИД Р..textView3);
окончательный полей EditText Эт = (полей EditText)findViewById, чтобы найти(ИД Р..полей EditText);
Кнопка кнопка = (кнопка)findViewById, чтобы найти(ИД Р..кнопка);

sf = getSharedPreferences(preferences, Context. MODE_PRIVATE);

переключатель (i){
случай 0:
tv1.setText(sf. getString (saveIt, ""));
Эт.помощью setText(" ");
перерыв;
корпус 1:
tv2.setText(sf. getString (saveIt, ""));
Эт.помощью setText(" ");
перерыв;
случай 2:
tv3.setText(sf. getString (saveIt, ""));
Эт.помощью setText(" ");
перерыв;
}




tv1. setOnClickListener (новый вид.OnClickListener() {
@Ручная коррекция
общественного недействительными onclick(посмотреть V) {
i = 0;
}
});
tv2. setOnClickListener (новый вид.OnClickListener() {
@Ручная коррекция
общественного недействительными onclick(посмотреть V) {
i = 1;
}
});
tv3. setOnClickListener (новый вид.OnClickListener() {
@Ручная коррекция
общественного недействительными onclick(посмотреть V) {
i = 2;
}
});
button. setOnClickListener(новый вид.OnClickListener() {
@Ручная коррекция
общественного недействительными onclick(посмотреть V) {
final String store = et. getText (). toString();
sf = getSharedPreferences(preferences, Context. MODE_PRIVATE);
Общие преференции.Редактор = СФ.редактировать();
editor. putString(saveIt, store);
редактор.применить();
переключатель (i){
случай 0:
tv1.setText(sf. getString (saveIt, ""));
Эт.помощью setText(" ");
перерыв;
корпус 1:
tv2.setText(sf. getString (saveIt, ""));
Эт.помощью setText(" ");
перерыв;
случай 2:
tv3.setText(sf. getString (saveIt, ""));
Эт.помощью setText(" ");
перерыв;
}
}
});


}
@Ручная коррекция
охраняемых недействительными методов onPause() {
GNStateManagerFactory. get (). store(this);
супер.методов onPause();

}
@Ручная коррекция
охраняемых недействительными onResume(){
GNStateManagerFactory.вам().извлекать(это);
}
}

Richard MacCutchan

Я никогда не сталкивался с этим и не могу найти его ссылку на веб-сайте Android Dev. Где вы его нашли?