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

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

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

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

06.08.2014, 14:40. Просмотров 750. Ответов 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);
    }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2014, 14:40     Переопределение onSaveInstanceState(Bundle) и отображение текста по нажатию
Посмотрите здесь:

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

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

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

Adt-bundle-windows - Программирование Android
Здравствуйте, Уважаемые программисты Андроид! Сориентируйте пожалуйста по такому вопросу. Установил adt-bundle-windows с поддержкой С++....

Сохранение в Bundle данных - Программирование Android
Вот когда идет сохранение состояния активити onSaveInstanceState(Bundle outState). Оно сохраняется в обьект Bundle. А где эти данные хранит...

Получить массив из Bundle extras - Программирование Android
Приходит intent. Bundle extras = intent.getExtras(); extras содержит: Bundle как можно получить все данные и записать их...

Не правильное отображение Текста - Программирование Android
Проект в Android Studio, минимальная версия 4.0, максимальная 4.2.2, таргет версия 4.1. Создал пункты меню, латиница отображается...

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

Не про то было)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2014, 23:53     Переопределение onSaveInstanceState(Bundle) и отображение текста по нажатию
Еще ссылки по теме:

Отображение текста (из файла) в textView - Программирование Android
В общем не могу разобраться как сделать так что бы при нажатии на кнопку (Button) в компоненте textView отображался текст, который будет...

Как правильно сохранять/восстанавливать данные из Bundle - Программирование Android
Доброго дня. Не могу точно разобраться где вызывать сохранение данных в Bundle и извлечение их оттуда. В Активити есть поле...

Переопределение методов - Программирование Android
Здравствуйте! Помогите, пожалуйста разобраться. При вызове метода B.aa("Тест"), я получаю вывод в логах из методов B.aa(String x) и...

Переопределение подкласса - Программирование Android
Гуру ООП, помогите! Запутался окончательно... Возможно ли вообще подобное: Есть класс вида: public class adapter_My extends...

Переопределение ViewBinder на C# - Программирование Android
Здравствуйте. Пытаюсь сделать урок, только на C# на VS13 с Xamarin. Код MainActivity public class MainActivity :...


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

Или воспользуйтесь поиском по форуму:
nilamop
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 22
13.08.2014, 23:53  [ТС]     Переопределение onSaveInstanceState(Bundle) и отображение текста по нажатию #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);
}
Yandex
Объявления
13.08.2014, 23:53     Переопределение onSaveInstanceState(Bundle) и отображение текста по нажатию
Ответ Создать тему
Опции темы

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