【发布时间】:2018-11-18 15:10:21
【问题描述】:
我有两个活动。第一个 (MainActivity) 有一个 FloatingActionButton,它通过 Intent 启动第二个 (AddEntryActivity)。填写表格后,数据应通过 JSON(嵌套 asyncTask 类)发送。通过AddEntryActivity 的方法评估此asyncTask 的成功与否。
如果失败,它会发送一条消息。如果成功,它会发送一条消息(到目前为止一切正常)并应关闭此活动并返回到MainActivity。
我读过很多类似的问题,例如:
- Android: Go back to previous activity,
- How to finish current activity in Android,
- Button to go back to MainActivity
- android - How to close an activity on button click?
并尝试过:
finish();
//super.finish();
//self.finish();
//AddEntryActivity.finish();
或
startActivity(new Intent(getApplicationContext(), MainActivity.class));
以及它们的组合或这个:
onBackPressed();
但没有一种方法适合我。这是MainActivity中第二个活动的调用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openAddRecordActivity();
}
});
}
public void openAddRecordActivity() {
Intent intent = new Intent(this, AddEntryActivity.class);
startActivity(intent);
}
成功祝酒出现(见下文),但从未返回到第一个活动。这是AddEntryActivity的调用方法(由AsyncTask的onPostExecute()):
void processResult(String result) {
if (result!=null) {
String state = result.split("\\|")[0];
String msg = result.split("\\|")[1];
if (state == "200") {
Toast.makeText(getBaseContext(), msg, Toast.LENGTH_SHORT).show();
finish();
startActivity(new Intent(getApplicationContext(), MainActivity.class));
} else {
Toast.makeText(getBaseContext(), msg, Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getBaseContext(), "No Result!", Toast.LENGTH_SHORT).show();
}
}
我没有做任何花哨的事情,但看不到我的错误。 如果您需要更多信息(例如 Manifest),请告诉我。
【问题讨论】:
-
您能否在启动
AddEntryActivity时尝试传递Intent.FLAG_ACTIVITY_NEW_TASK,并在收到成功响应消息后使用onBackPressed()方法? -
如果你从 main 开始你的第二个活动,并且你想传回一个结果,你应该首先使用
startActivityForResult,然后在下一个使用setResult和finish -
我认为您的
finish()代码永远不会被调用。当涉及到字符串时,您应该使用if ("200".equals(state))而不是==运算符。 -
一个简单的finish() 应该会让你回到上一个活动。您不应该再次启动主要活动,因为这会将 2 个主要活动放在您的后台堆栈中。祝酒成功后会发生什么? AddEntryActivity 是否只停留在屏幕上?
-
你能完整显示 AddEntryActivity 吗?
标签: android