当调用另一个活动时,我可以确定当它返回时我存储在当前活动中的变量是否存在?
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View item, int pos, long id) {
Intent i = new Intent(Activity1.this, Activity2.class);
i.putExtra("position", pos); // 1
position = pos; // 2
startActivityForResult(i, REQUEST_CODE); // brings up the edit item activity
}
});
对于上面的代码,我可以使用(2)存储在当前活动实例字段中,还是应该使用(1)传递值,然后使用getIntExtra()
中的onActivityResult()
来恢复该值?< / p>
答案 0 :(得分:1)
是当您返回 Activity1 时会显示,因此无需使用getIntExtra
。只需将您的位置存储在 Activity1 的全局变量中。
答案 1 :(得分:1)
理想情况下,您只需在# crontab file example
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=your@email.com
0 * * * * /usr/bin/python3 /data/script.py 2>&1 | tee /var/log/log.txt
中保存状态即可。这样你就不必通过Activity1
传递变量,然后将结果(这不完全是Activity2
中完成的任何结果)传递回Activity2
。要在Activity1
中保存position
的值,您应该在Activity1
内执行以下操作:
Activity
如果您不希望在屏幕方向更改或操作系统终止并重新启动您的活动时丢失该值,这也是相关的。
最后,为了保持代码的有序性,除非您需要在 private static final String KEY_ARG_POSITION = "KEY_ARG_POSITION";
private int position;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Do whatever you are doing in onCreate already...
if (savedInstanceState != null) {
position = savedInstanceState.getInt(KEY_ARG_POSITION);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(KEY_ARG_POSITION, position);
}
中使用position
的值,否则我建议不要将Activity2
公开给任何数据不需要管理。如果你正在开发一个大型应用程序,这些东西可能会加起来并迅速变得混乱。
答案 2 :(得分:0)
使用startActivityForResult时......您提供的请求代码将在onActivityResult方法中返回。在那里,您将获得请求代码,以及结果代码(成功,失败等,以及您可以从您开始的活动中设置的Intent数据。
所以你可以这样做:
Intent i = new Intent(Activity1.this, Activity2.class);
i.putExtra("position", pos);
startActivityForResult(i, REQUEST_CODE);
然后在你的Activity2类
中Intent intent = new Intent();
intent.putExtras(getIntent().getExtra("position"));
setResult(RESULT_OK, intent);
finish();
在你的第一个Activity中会调用:
onActivityResult(int requestCode, int resultCode, Intent data) {
//Check it's your requestCode,
//Check resultCode == RESULT_OK or whatever you need
//Grab your position from the data intent
}
有关详细信息,请参阅https://developer.android.com/training/basics/intents/result.html
答案 3 :(得分:0)
我的建议:在Intent
中传递足够的信息,以唯一标识感兴趣的数据项。不要只是传递一个位置,因为如果项目的顺序发生变化或其他项目从列表中添加/删除,则位置可能会发生变化。想象一下您将位置2传递给Activity2
的情况,但在Activity2
启动时,Activity1
重新加载其数据,而位置2现在是其他项目。
此外,我不会依赖于调用Activity的实例成员(即代码中的行position = pos
)。您的Activity1
可能被杀死,而另一个活动是直接前景活动。在这种情况下,将结果返回到Activity1
时将重新创建,但它将是Activity1的新实例,因此您的实例成员position
将不具有您之前设置的数据。