Группа действий не обновляет действия при нажатии кнопки «Назад» - PullRequest
1 голос
/ 20 апреля 2011

У меня есть приложение-вкладка, и я использую группу Activity, которая обрабатывает 3 действия внутри.

Пример: ActivityGroup Handles A -> B -> C

Когда я начинаю эту деятельность, я использую флаг Intent.FLAG_ACTIVITY_CLEAR_TOP.

Моя проблема в том, что когда пользователь выходит из A-> B-> C и нажимает кнопку «назад», появляется моя активность B, но она не возобновляется, не перезагружается и не обновляется. Он имеет то же состояние, что и раньше.

Например, если пользователь снова идет к C, C обновляется, но когда из C возвращается назад .... B - нет.

На B у меня есть методы реализации, такие как onResume, onStart, onReestart и отладка его, основной поток никогда не идет туда ...

И мне нужно обновить B, потому что C может вносить изменения, которые изменяют содержимое, отображаемое на B.

Я гуглил это в течение 3 дней, и я не смог найти решение ..

Ответы [ 5 ]

2 голосов
/ 24 июня 2011

У меня тоже была эта проблема.

Я использовал код ActivityGroup на основе этого сообщения в блоге .

Когда я нажимал кнопку «Назад», предыдущий просмотр работал нормально, но связанная с ним активность не запускала onResume().

Я использовал расширенную активность с переопределенной и общедоступной onResume().

Я нашел это сообщение в блоге , поэтому попытался преобразовать представление в мою расширенную деятельность и вызвал onResume().

Бинго.

Редактировать ... вот еще немного подробностей ...

public class YFIMenuListActivity extends ListActivity {
....
  @Override
  public void onResume() {
    super.onResume();
  }
....
}

onResume() обычно защищен, но я перезаписываю его и делаю его общедоступным, чтобы моя ActivityGroup могла вызывать его. У меня только расширенный список действий в этой группе действий (я просто играл). Если у вас есть разные действия, каждая из них должна будет переопределить onResume(), и я думаю, вам придется посмотреть на тип контекста, который вы получили от v.getContext(), прежде чем вызывать и вызывать его.

Моя группа активности выглядит примерно так:

public class BrowseGroup extends ActivityGroup {
.....
  @Override
  protected void onResume() {
    super.onResume();
    // call current activity's onResume()
    View v = history.get(history.size()-1);
    YFIMenuListActivity currentActivity = (YFIMenuListActivity)v.getContext();
    currentActivity.onResume();
  }
....
}
1 голос
/ 09 марта 2012
((ReportActivity)getLocalActivityManager().getActivity("ReportActivity")).onResume();

ReportActivity - это имя, которое вы хотите поддержать. ps: v.getContext ();

возвращает только ActivityGroup, она не может вызывать дочернюю активность onResume

1 голос
/ 13 октября 2011

Мне удалось реализовать расширенную версию подхода cousin_itt.

В обеих моих операциях, используемых в группе действий, я изменил onResume с:

protected void onResume()

на

public void onResume()

Затем я написал следующую функцию onResume в моей ActivityGroup для ручного запуска onResumes:

@Override
protected void onResume() { 
super.onResume();
View v = history.get(history.size()-1);

MainPeopleView currentActivity = null;   

try {
    currentActivity = (MainPeopleView)v.getContext();
    currentActivity.onResume();
}
catch ( ClassCastException e ) {
    Log.e(TAG, e.toString());
}

ProfileView otherActivity = null;

try {
otherActivity = (ProfileView)v.getContext();
otherActivity.onResume();
}
catch ( ClassCastException e ) {
    Log.e(TAG, e.toString());
}
}

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

0 голосов
/ 13 октября 2011

Я обнаружил, что onFocusChanged(boolean hasFocus) отлично подходит для таких ситуаций, как ActivityGroup.Это сработает, даже если onResume() нет.Я использую его для нескольких своих приложений, которые имеют TabHost s и ActivityGroup s.Здесь вы можете принудительно обновить и убедиться, что оно всегда срабатывает, когда ваш Activity восстанавливает фокус.

0 голосов
/ 20 апреля 2011

Я надеюсь, что вы написали код обновления данных этим методом onResume().

...