0

さまざまな API 呼び出しを使用してドリルダウン リストを実装しています (リストの現在の位置に応じて異なります)。アクティビティ (EventListActivity) を初めて開くと、APICall1 が呼び出されます。JSON 応答から入力されたリスト項目をクリックすると、(APICall1 からの) 親 ID を使用して APICall2 が呼び出されます。返されたデータがツリーの子ノードでない場合は、(前の APICall2 からの) 新しい親 ID を使用して APICall2 を再度呼び出します。子の場合は、最後に APICall3 を呼び出します。

基本的に、実装方法に関係なく、EventListActivity を呼び出して前のアクティビティの上にスタックする必要があります (ユーザーは前の画面に戻る必要があるため)。ただし、問題は、onCreate を実行して実際にアクティビティを再起動するのではなく、EventListActivity から EventListActivity を起動しようとすると、onResume にヒットすることです。

listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {

    if (status == GET_SPORTS) {
        status = GET_CATEGORIES;
        //parent_id = ; //currently hardcoded in

        Bundle params = new Bundle();
        params.putInt("status", status);
        params.putInt("parent_id", parent_id);

        //Intent intent = new Intent(mActivity, FavoritesActivity.class);
        Intent intent = new Intent(mActivity, EventListActivity.class);
        intent.putExtras(params);
        startActivity(intent);
    } else if (status == GET_CATEGORIES) {
        status = GET_EVENTS;
        //parent_id = ; //currently hardcoded in

        Bundle params = new Bundle();
        params.putInt("status", status);
        params.putInt("parent_id", parent_id);

        Intent intent = new Intent(mActivity, EventListActivity.class);
        intent.putExtras(params);
        startActivity(intent);
    } else if (status == GET_EVENTS) {
        //do things!
    }
}
});

14 行目のインテント インテント... のコメントを外し、15 行をコメント アウトすると (EventListActivity の代わりに新しい FavoritesActivity を起動します)、正常に動作し、FavoritesActivity を正常に起動します。そのため、onResume を通過するのではなく、EventListActivity の再起動を妨げている原因がわかりません。

私は次のことを認識しています。

    startActivity(intent);
    mActivity.finish();

アクティビティを再起動/再作成するための迅速な (そしておそらく汚い) 方法であるため、 mActivity.finish() を除外して、それ自体の上に新しい EventListActivity を起動するべきではありませんか?

4

2 に答える 2

3

問題は Android マニフェストにあったことが判明しました。このアクティビティの下には、次の設定がありました。

    android:launchMode="singleTop"

これにより、特定のアクティビティをアクティブにできる回数が 1 回に制限されているようonResume()ですonCreate()

于 2013-05-15T17:25:55.683 に答える