我在Activity1中有一个(自定义)列表视图。当我单击一行时,Activity2将打开另一个(自定义)列表视图。在两个列表视图的行中有几个对象:imageview,checkbox,textview 当我将所有复选框设置为在activity2中选中,然后单击手机的BACK按钮时,应检查列表视图中相应行的复选框。但是,当我单击BACK按钮时,没有任何反应(检查Logcat,没有新行,没有日志,没有) 所以我认为我覆盖了BACK按钮,所以当我点击它时,Activity1应该打开。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intentstart = new Intent(Activity2.this, Activity1.class);
startActivity(intentstart);
return true;
}
return super.onKeyDown(keyCode, event);
}
这有效,但我有顾忌。这是一个好的解决方案吗?有更好的解决方案吗? 因为这会扼杀BACK btn的正常行为。
正常行为:
NEW BEHAVIOR:
答案 0 :(得分:0)
Intent intentstart = new Intent(Activity2.this, Activity1.class);
intentstart.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intentstart);
此标志将删除已打开的活动。
例如,考虑一个由活动组成的任务:A,B,C,D。如果D调用带有解析为活动B组件的Intent的startActivity(),那么C和D将完成并且B接收给定的Intent,导致堆栈现在为:A,B。
如果要检查activity2上的复选框,请在返回时检查activity1。 你应该使用
startActivityForResult(intent, requestCode);//when start new activity
Intent resultIntent = new Intent(); // when finish activity2
resultIntent.putExtra("selected", selected); //send checked data to activity1
setResult(Activity.RESULT_OK, resultIntent);
finish();
然后覆盖onActivityResult()以选中复选框
P.S。按下后退按钮时,您可以覆盖onBackPressed()以执行操作。
答案 1 :(得分:0)
您需要做的是使用startActivityForResult()开始活动。这样您就可以覆盖onActivityResult()。只需在获得结果时刷新数据视图即可。
此外,我总是发现用户不可避免地要求我提供“保存”按钮以肯定确认操作并使用返回取消操作。