Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
nilamop
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 22
#1

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

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

Наверное сложно будет понять чего я хочу, но вдруг...

Через 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2014, 14:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переопределение onSaveInstanceState(Bundle) и отображение текста по нажатию (Программирование Android):

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

Форматирование текста и действие по нажатию кнопки назад - Программирование Android
День добрый! Столкнулся с такой проблемой: -есть текст и его надо выровнять по ширине т.е не центр а как в ворде. <?xml...

Textview. Изменение текста по нажатию кнопки не происходит - Программирование Android
Добрый день. Подскажите как же реализовывается подобное : в методе onCreat получаем интент с id выбранного элемента на предыдущей...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
06.08.2014, 15:10 #2
Цитата Сообщение от nilamop Посмотреть сообщение
Наверное сложно будет понять чего я хочу, но вдруг...
И правда сложно) Что мешает выводить текст только лишь по нажатию кнопки, а не при запуске активити?
0
nilamop
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 22
06.08.2014, 15:24  [ТС] #3
У меня приложение "тестирование", в первой активности массив с вопросами и вариантами ответов в виде true, false. В ней же можно перейти во вторую активность и подсмотреть ответ, вернуться в первую и дать ответ. Данные про правильность ответа получаю из первой активности во вторую.
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
06.08.2014, 15:28 #4
По моему для показа подсказки, достаточно AlertDialog'a. И никаких проблем с переходами из одной активити в другую. Если же принципиально нужно в другой активити - тогда при нажатии на кнопку "показать ответ" передать во вторую активити интентом верный ответ и там отобразить. При этом после возврата обратно на первую там ничего не изменится, если дополнительно не прописать.
0
nilamop
0 / 0 / 0
Регистрация: 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
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
13.08.2014, 20:29 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
if(MyAnswerTextView.getText() ==""){
//код
}

Не про то было)
1
nilamop
0 / 0 / 0
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2014, 23:53
Привет! Вот еще темы с ответами:

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

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

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

Скрытие и отображение компонентов формы по нажатию на кнопку - Java
подскажите, как при нажатии на jButton1, скрывался jLabel1 и jCheckBox1 , вместо них появлялся jLabel2 и jCheckBox2? как в делфях знаю а...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.08.2014, 23:53
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru