我有这种情况的聊天应用程序:
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
答案 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();