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

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

Войти
Регистрация
Восстановить пароль
 
z-z
169 / 168 / 30
Регистрация: 22.06.2011
Сообщений: 980
#1

StartActivityForResult: не сохраняется предыдущее состояние activity - Android

20.02.2015, 15:56. Просмотров 351. Ответов 7
Метки нет (Все метки)

Здравствуйте.

В приложении есть 3 activity:

1. Главная activity
2. activity для выбора цвета
3. activity для выбора Gravity

activity 2 и 3 вызываются из 1 методом startActivityForResult.

При получении ответа для TextView из activity 1 присваивается соответственно либо цвет, либо выравнивание.

В принципе все работает. Но есть одно "но".

Я делаю это по видео уроку со startandroid, и там, например, если сначала выбрать цвет, потом выбрать выравнивание, то сохраняется цвет тоже. А у меня каждый раз все сбрасывается и назначается только последнее свойство...

Писал код руками, но вроде точно как в уроке. Что я мог сделать не так?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2015, 15:56     StartActivityForResult: не сохраняется предыдущее состояние activity
Посмотрите здесь:

destroy activity Android
Canvas и Activity Android
Приостановка Activity Android
Fragments и Activity Android
Activity с авторизацией Android
Activity и многопоточность Android
Android Создание Activity
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Serbis
3 / 3 / 2
Регистрация: 13.07.2012
Сообщений: 122
21.02.2015, 00:05     StartActivityForResult: не сохраняется предыдущее состояние activity #2
Ничего не понял. Вам нужно что бы в activity 2 и 3 сохранялся результат и следующей загрузке? Сохраняйте его в объекте SharedPreferences как настройку и грузите ее при следующем старте активности.
z-z
169 / 168 / 30
Регистрация: 22.06.2011
Сообщений: 980
21.02.2015, 09:32  [ТС]     StartActivityForResult: не сохраняется предыдущее состояние activity #3
Serbis, нее... чтобы в активности 1 сохранялись изменения... Вот к примеру:

- Вызвал активность 2 и выбрал цвет. Назначил этот цвет тексту в активности 1
- Вызвал активность 3 и выбрал выравнивание (Gravity). Назначил и это тексту в активности 1

И вот тут проблема возникает. Пусть я выбрал красный цвет. Потом вызвал 3-ю активность, выбрал выравнивание. Но после того, как я вернулся в 1-ю активность, текст там уже не красный, а черный, по умолчанию...

Вот текстовая версия урока. У автора при выборе сначала одного свойства, потом второго свойства они оба сохраняются. А у меня почему то сбрасываются каждый раз)

На сколько я понимаю, ведь активность 1 не уничтожается? Почему тогда она теряет свойства... Может опять баг системы)
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 433
21.02.2015, 09:52     StartActivityForResult: не сохраняется предыдущее состояние activity #4
Бывают всякие баги, заюзай SharedPreference, для этого случаю самое оно)
Serbis
3 / 3 / 2
Регистрация: 13.07.2012
Сообщений: 122
21.02.2015, 12:06     StartActivityForResult: не сохраняется предыдущее состояние activity #5
Ваш код первой активности покажите.
z-z
169 / 168 / 30
Регистрация: 22.06.2011
Сообщений: 980
21.02.2015, 13:27  [ТС]     StartActivityForResult: не сохраняется предыдущее состояние activity #6
Serbis, вот

Кликните здесь для просмотра всего текста
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
 
 
public class MainActivity extends ActionBarActivity implements View.OnClickListener {
 
    TextView tv;
    Button colorBtn;
    Button gravityBtn;
 
    final int REQUEST_CODE_COLOR = 1;
    final int REQUEST_CODE_ALIGN = 2;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        tv = (TextView) findViewById(R.id.tv);
        colorBtn = (Button) findViewById(R.id.color);
        gravityBtn = (Button) findViewById(R.id.gravity);
 
        colorBtn.setOnClickListener(this);
        gravityBtn.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v) {
        Intent intent;
        switch (v.getId()){
            case R.id.color:
                intent = new Intent(this, ColorActivity.class);
                startActivityForResult(intent, REQUEST_CODE_COLOR);
                break;
            case R.id.gravity:
                intent = new Intent(this, AlignActivity.class);
                startActivityForResult(intent, REQUEST_CODE_ALIGN);
                break;
        }
    }
 
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // если пришло ОК
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case REQUEST_CODE_COLOR:
                    int color = data.getIntExtra("color", Color.WHITE);
                    tv.setTextColor(color);
                    break;
                case REQUEST_CODE_ALIGN:
                    int align = data.getIntExtra("align", Gravity.LEFT);
                    tv.setGravity(align);
                    break;
            }
            // если вернулось не ОК
        } else {
            Toast.makeText(this, "Wrong result", Toast.LENGTH_SHORT).show();
        }
    }
 
 
 
}



Еще маленький вопрос: что такое @Override? Зачем его перед функциями ставят? Где про это почитать можно?))
А то джаву не учил вообще, видимо это сказывается
Serbis
3 / 3 / 2
Регистрация: 13.07.2012
Сообщений: 122
21.02.2015, 16:36     StartActivityForResult: не сохраняется предыдущее состояние activity #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ну в общем все правильно. Скорее всего это действительно микробаг. Их очень много в системе. Решение в данном случае вызвать при получении результат функцию для настройки метки. Колхоз дикий, но к нему периодически приходится прибегать.
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
private int color = Color.WHITE;
private int align = Gravity.LEFT;
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // если пришло ОК
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case REQUEST_CODE_COLOR:
                    color = data.getIntExtra("color", Color.WHITE);
                    setTextCaptions();
                    break;
                case REQUEST_CODE_ALIGN:
                    align = data.getIntExtra("align", Gravity.LEFT);
                    setTextCaptions();
                    break;
            }
            // если вернулось не ОК
        } else {
            Toast.makeText(this, "Wrong result", Toast.LENGTH_SHORT).show();
        }
    }
 
private void setTextCaptions() {
     tv.setTextColor(color);
     tv.setGravity(align);
}
@Override это аннотация, указывающая что дальше переопределяется метод суперкласса (вышестоящего класса). Например без нее onActivityResult будет просто функцией внутри текущего класса, и не будет вызвана при завершении активности. Тут очень подробно http://java-course.ru/begin/override-overload/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2015, 17:21     StartActivityForResult: не сохраняется предыдущее состояние activity
Еще ссылки по теме:

Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult Android
Android Activity окошки
Android Два Activity
Android Как передавать данные в предыдущее activity, используя кнопку назад в action bar?
Android Basic Activity

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

Или воспользуйтесь поиском по форуму:
z-z
169 / 168 / 30
Регистрация: 22.06.2011
Сообщений: 980
21.02.2015, 17:21  [ТС]     StartActivityForResult: не сохраняется предыдущее состояние activity #8
Serbis, спасибо. Идея понятна и вроде как даже не очень страшна)) Только если это будет какая то отдельная страничка настроек, буду хранить в какой нибудь БД или еще где нибудь... До туда еще не дошел ))
Yandex
Объявления
21.02.2015, 17:21     StartActivityForResult: не сохраняется предыдущее состояние activity
Ответ Создать тему
Опции темы

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