Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 1
Регистрация: 23.05.2013
Сообщений: 22
1

Переопределение onSaveInstanceState(Bundle) и отображение текста по нажатию

06.08.2014, 14:40. Показов 1938. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Наверное сложно будет понять чего я хочу, но вдруг...

Через Intent из родительской активности перехожу в дочернюю. Там при нажатии кнопки вывожу два типа текста на экран из массива.

Проблема в том, что при переходе на новую активность у меня уже выводится текст(0 значение массива), а надо чтобы оно сохранялось(в объекте?) и только по нажатию кнопки выводилось. Пробовал updateAnswer() "объять" mShowAnswer.setOnClickListener, или же android:onClick задействовать - ничего не получается
Текст при поворотах не пропадает, просто выводится нулевое значение массива
Помогите пожалуйста.
Java
1
2
3
4
5
6
7
8
9
public void updateAnswer() {
        if(mCurrentIndex2 == 0) {
            int answer = mAnswerBank[mCurrentIndex2].getAnswer();
            mAnswerTextView.setText(answer);
        } else {
            int answer = mAnswerBank[mCurrentIndex2+1].getAnswer();
            mAnswerTextView.setText(answer);
        }
    }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
mShowAnswer = (Button)findViewById(R.id.showAnswerButton);
        mShowAnswer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mAnswerIsTrue) {
                    int answer = mAnswerBank[mCurrentIndex2].getAnswer();
                    mAnswerTextView.setText(answer);
                } else {
                    int answer = mAnswerBank[mCurrentIndex2+1].getAnswer();
                    mAnswerTextView.setText(answer);
                }
                setAnswerShownResult(true);
            }
        });
        updateAnswer();
        if (savedInstanceState != null) {
            mCurrentIndex2 = savedInstanceState.getInt(KEY_INDEX2, 0);
        }
        updateAnswer();
    }
 
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        Log.i(TAG, "onSaveInstanceState");
        savedInstanceState.putInt(KEY_INDEX2, mCurrentIndex2);
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2014, 14:40
Ответы с готовыми решениями:

Смена текста по нажатию кнопки и возврат текста по времени
Здравствуйте, есть такая проблема с Unity, что если через Sleep делать, то останавливается вся...

Фрагмент ошибка cannot perform this action after onSaveInstanceState
Здравствуйте, в приложении для android использую фрагмент, вызываю его так:...

Отображение окна по нажатию кнопки
Всем привет. Только начал изучать, пишу программу для лабораторной winAPI c++, нужно создать...

Отображение рисунка по нажатию на кнопку
Подскажите как сделать, чтобы при вводе имени файла в input type="text" и нажатию на кнопку...

6
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
06.08.2014, 15:10 2
Цитата Сообщение от nilamop Посмотреть сообщение
Наверное сложно будет понять чего я хочу, но вдруг...
И правда сложно) Что мешает выводить текст только лишь по нажатию кнопки, а не при запуске активити?
0
1 / 1 / 1
Регистрация: 23.05.2013
Сообщений: 22
06.08.2014, 15:24  [ТС] 3
У меня приложение "тестирование", в первой активности массив с вопросами и вариантами ответов в виде true, false. В ней же можно перейти во вторую активность и подсмотреть ответ, вернуться в первую и дать ответ. Данные про правильность ответа получаю из первой активности во вторую.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
06.08.2014, 15:28 4
По моему для показа подсказки, достаточно AlertDialog'a. И никаких проблем с переходами из одной активити в другую. Если же принципиально нужно в другой активити - тогда при нажатии на кнопку "показать ответ" передать во вторую активити интентом верный ответ и там отобразить. При этом после возврата обратно на первую там ничего не изменится, если дополнительно не прописать.
0
1 / 1 / 1
Регистрация: 23.05.2013
Сообщений: 22
13.08.2014, 19:50  [ТС] 5
Доброго дня.

Хочу поделиться наработками по своему вопросу и попросить подсказки.
Ранее мной при переопределении метода onSaveInstanceState() я пытался в константное значение методом putInt вписать булевое, а надо было использовать putBoolean(). В результате я добился своего и при повороте экрана(создании новой активности) я получал(сохраненное в константу(до краша предыдушей)) значение и как видно в функции updateAnswer() использовал его.

Все замечательно. Но есть одно но. Если я перехожу в дочернюю активность. И не нажму кнопку вывода мне значения true или false, а просто поверну экран, то мне создавая новую активность появлялось значение которое сохранялось в константном значении, а нужно условие, чтобы при повороте, и значении TextView == null, тоесть если там ничего небыло, небыло значения текстового true или false, тогда чтобы и при повороте(создании новой активности, оно таким же оставалось и не вытягивалось из константы.

Я пробовал создать это правило, но видимо знания не хватает, или недопонимаю. mAnswerTextView никак не null так как оно ссылается на TextView. Подскажите какое условие, как отобразить можно его?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    [COLOR="Red"]private void updateAnswer() {
        if (mAnswerTextView != null) {
                    mAnswerTextView.setText(R.string.cheat_button);[/COLOR]
        } else {
            if (mAnswerIsTrue) {
                mAnswerTextView.setText(R.string.true_button);
            } else {
                mAnswerTextView.setText(R.string.false_button);
            }
        }
}            
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cheat);
 
        mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, false); // получаем значение из дополнения, если нету, то по умолчанию false
 
        mAnswerTextView = (TextView)findViewById(R.id.answerTextView);
        mShowAnswer = (Button)findViewById(R.id.showAnswerButton);
        mShowAnswer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mAnswerIsTrue) {
                    mAnswerTextView.setText(R.string.true_button);
                } else {
                    mAnswerTextView.setText(R.string.false_button);
                }
                setAnswerShownResult(true);
            }
        });
        if (savedInstanceState != null) {
            mAnswerIsTrue = savedInstanceState.getBoolean(BOOLEAN_TRUE_FALSE_TEXTVIEW);
            updateAnswer();
        }
 
    }
 
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putBoolean(BOOLEAN_TRUE_FALSE_TEXTVIEW, mAnswerIsTrue);
    }
}
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
13.08.2014, 20:29 6
Лучший ответ Сообщение было отмечено nilamop как решение

Решение

if(MyAnswerTextView.getText() ==""){
//код
}

Не про то было)
1
1 / 1 / 1
Регистрация: 23.05.2013
Сообщений: 22
13.08.2014, 23:53  [ТС] 7
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private String True_False_String = ""; // перем для хранения строкового значения после поворотов
 
    private void updateAnswer() {
        if (True_False_String == ""){
            mAnswerTextView.setText("");
        } else {
            if (mAnswerIsTrue) {
                mAnswerTextView.setText(R.string.true_button);
            } else {
                mAnswerTextView.setText(R.string.false_button);
            }
            setAnswerShownResult(true);
        }
    }
Юхху
Работает, запускаю дочернюю активность - пусто, поворачиваю экран - пусто.
Нажимаю на кнопку - есть ответ, поворачиваю - ответ сохраняется. Как же я счастлив, что разобрался с передачей данных между активностями

p.s. Вот мой переопределенный метод. Может кому-то пригодится.
Java
1
2
3
4
5
6
7
8
@Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putBoolean(BOOLEAN_TRUE_FALSE_TEXTVIEW, mAnswerIsTrue);
 
 
        savedInstanceState.putString(TRUE_FALSE_STRING, True_False_String);
}
0
13.08.2014, 23:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2014, 23:53
Помогаю со студенческими работами здесь

Как сделать отображение справки по нажатию F1?
Как сделать собственно отображение справки на F1?

Отображение JPanel по нажатию определенной кнопки
как можно сделать, чтобы как в JTabbedPanel, при нажатии определенной кнопки, ПО ЦЕНТРУ можно было...

Некорректное отображение текста (или текста вообще нет) в браузерах
Здравствуйте, проблема такая: некорректно отображаются текст и ссылки в браузерах Google Chrome и...

Нахождение текста и отображение индекса этого же текста в массиве
Всем привет. Имеется код: string s = { "AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH" }; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru