按下后,Android Intent FLAG_ACTIVITY_TASK_ON_HOME不会返回主页

时间:2017-07-11 12:11:21

标签: android android-intent android-activity chat back-stack

我有这种情况的聊天应用程序:

A - MainActivity

B - 聊天活动

C - 前进活动

我们假设我想将Bill的消息转发给John的聊天,我打开A - > B - > C,在C i上必须选择要转发的用户,所以我点击John投掷一个新的B意图,现在在堆栈中我有ABCB,如果从John的聊天我按下后退按钮我想回到A(MainActivity) ,但实际上我回到B(比尔的聊天),这是一个问题,因为聊天活动必须只有一个。 为了必要,聊天活动在清单中设置为android:launchMode =“singleTop”,因为如果我在前台有聊天并且我点击“新消息”android通知,则关闭当前聊天并打开新聊天。阅读开发人员指南我发现FLAG_ACTIVITY_TASK_ON_HOME,因为我可以理解这个标志我应该能够直接从John的聊天(B)回到MainActivity(A),但是没有发生。

这是A(带有滑动标签布局的MainActivity,从ListFragment标签活动启动Intent)

    Intent intent = new Intent(getContext(), Chats.class);
    Bundle b = new Bundle();
    b.putString("nid", list_id.toString()); 
    b.putString("user_id_key", list_user_id.toString());
    b.putString("name", list_name.toString());
    b.putString("number", list_number.toString());
    intent.putExtras(b); 
    startActivityForResult(intent, 101);

这是B(聊天活动 - AppCompatActivity)

    Intent intent = new Intent(getApplicationContext(), Forward.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    Bundle b = new Bundle();
    b.putString("forward_mess", MessText);
    b.putString("number", number);
    b.putString("conv_id", convId);
    intent.putExtras(b);
    startActivity(intent);

这是C(转发活动 - AppCompatActivity)

    Intent intent = new Intent(getApplicationContext(), Chats.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_TASK_ON_HOME);
    Bundle b = new Bundle();
    b.putString("nid", sel_nid);
    b.putString("user_id_key", sel_user_receiver);
    b.putString("name", sel_name);
    b.putString("number", sel_number);
    b.putString("forward_mess", forward_mess);
    intent.putExtras(b);
    startActivityForResult(intent, 101);
    finish();

还尝试使用FLAG_ACTIVITY_CLEAR_TOP,但这直接带我到A-> B

1 个答案:

答案 0 :(得分:0)

使用聊天活动中的onActivityResult方法解决。

这里有正确的活动流程:

MainActivity - > startActivityForResult(chat_intent,101);

聊天 - > startActivityForResult(forward_intent,5);

设置onActivityResult方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //If is 5 means Forward activity was closed
    if (requestCode == 5) {
        // If 10 means a new Chat was opened, so this one must be closed
        if (resultCode == 10) {
            finish();
        }
    }
}

转发

startActivityForResult(chat_intent, 101);
setResult(10);
finish();