1

アプリケーションにタブホストがあり、内部で3つのアクティビティを処理するアクティビティグループを使用しています。

例:ActivityGroupはA->B->Cを処理します

このアクティビティを開始するときは、フラグIntent.FLAG_ACTIVITY_CLEAR_TOPを使用しています。

私の問題は、ユーザーがA-> B-> Cから移動して戻るボタンを押すと、Bアクティビティが表示されますが、再開、リロード、または更新されないことです。以前と同じ状態です。

たとえば、ユーザーが再びCに移動すると、Cは更新されますが、Cから戻ると...Bは更新されません。

BIには、onResume、onStart、onReestartなどのimplementendメソッドがあり、メインスレッドがそこに入ることはありません...

また、CはBに表示されるコンテンツを変更する変更を加えることができるため、Bを更新する必要があります。

私はこれを3日間グーグルで検索しましたが、解決策が見つかりませんでした。

4

5 に答える 5

2

私もこの問題を抱えていました。

このブログ投稿に基づいて、ActivityGroup コードを使用していました。

戻るボタンを押すと、前のビューは正常にロードされましたが、それに関連付けられたアクティビティはonResume().

on overridden と public で拡張アクティビティを使用していましたonResume()

このブログ投稿を見つけたので、ビューを拡張アクティビティとしてキャストして、 を呼び出してみonResume()ました。

ビンゴ。

編集....ここにいくつかの詳細があります...

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

onResume()通常は保護されていますが、オーバーライドして公開し、ActivityGroup から呼び出せるようにします。このアクティビティ グループには拡張リスト アクティビティしかありません (遊んでいただけです)。異なるアクティビティがある場合は、それぞれをオーバーライドする必要があります。キャストして呼び出す前に、onResume()取得したコンテキストのタイプを確認する必要があると思います。v.getContext()

私のActivityGroupは次のようになります。

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();
  }
....
}
于 2011-06-24T18:39:20.233 に答える
1
((ReportActivity)getLocalActivityManager().getActivity("ReportActivity")).onResume();

ReportActivityは、アクティビティpsをバックアップする名前です。v.getContext();

ActivityGroupのみを返し、子ActivityonResumeを呼び出すことはできません

于 2012-03-09T02:54:10.437 に答える
1

私は、cousin_itt のアプローチの拡張バージョンを実装することができました。

アクティビティ グループ内で使用されている両方のアクティビティで、onResume を次のように変更しました。

protected void onResume()

public void onResume()

次に、ActivityGroup に次の onResume 関数を記述して、onResume を手動で起動しました。

@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());
}
}

これは私が今まで書いた中で最悪の Android ハックのように感じます。私は二度とアクティビティグループを使用しません。

于 2011-10-13T00:33:40.880 に答える
0

このメソッドでデータの更新コードを記述したことを願っていますonResume()

于 2011-04-20T10:33:45.163 に答える
0

のようonFocusChanged(boolean hasFocus)な状況に最適ですActivityGroup。これは、たとえそうonResume()でないとしても、発火します。TabHosts とsを持ついくつかのアプリで使用していますActivityGroup。ここでは、リフレッシュを強制してActivity、フォーカスが戻ったときに常に起動されるようにすることができます。

于 2011-10-13T04:29:29.380 に答える