Обновите значения основного действия из другого действия - PullRequest
0 голосов
/ 06 февраля 2011

Я хочу обновить текстовое представление в моем основном виде активности.

У меня есть файл main.xml, который содержит основной экран приложения, на этом экране у меня есть текстовое представление, которое мне нужно время от времени обновлять сдругое действие (класс).

Если я пытаюсь обновить эти значения из основного действия, оно работает отлично, но когда я пытаюсь сделать это из другой деятельности, приложение вылетает.

Здесьэто метод основного действия, мне нужно знать, как вызвать его из другого действия.

Основной метод действия:

    public void update_counters(){    
        TextView sms_textview = (TextView) findViewById(R.id.sms_textview);
        sms_textview.setText(String.valueOf(sms_missed));
    }

Пожалуйста, помогите

Ответы [ 3 ]

1 голос
/ 06 февраля 2011

Действительно, плохая практика - иметь какие-либо статические ссылки на действия (или другие контексты). Деятельность должна быть достаточно независимой друг от друга.

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

0 голосов
/ 06 февраля 2011

Как сказал @Roman, плохая практика - касаться интерфейса с другими действиями, и действия должны быть независимыми. Что вы можете сделать, это немного изменить метод передачи сообщений. Можно было бы использовать приемник вещания, это также гарантирует лучшую расширяемость вашей программы.

Таким образом, всякий раз, когда вашей «другой» деятельности нужно вызвать update_counters, она передает такое намерение. Ваш предыдущий MainActivity должен зарегистрироваться для прослушивания этой трансляции и при необходимости обновить пользовательский интерфейс. Лучше всего, если у вас есть еще несколько экземпляров этого действия или другого действия, которое также может быть зарегистрировано в этой трансляции.

0 голосов
/ 06 февраля 2011

Есть ли только один экземпляр вашей основной деятельности?Если это так, сохраните статическую ссылку на него в основном классе активности, инициализируйте его в onCreate.Затем создайте статический метод, который использует эту ссылку для доступа к экземпляру:

static MainActivity TheMainActivity;

static public void update_counters()
{
    TextView sms_textview = (TextView) TheMainActivity.findViewById(R.id.sms_textview); sms_textview.setText(String.valueOf(sms_missed));
}

В другом действии:

MainActivity.update_counters();

Это называется одиночным.Или, иногда, глобальный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...