我有两个活动,一个是HomeActivity,另一个是InfoFetchActivity。 HomeActivity调用InfoFetchActivity获取结果如下:
Intent infoIntent = new Intent(this,InfoFetchActivity.class);
startActivityForResult(infoIntent, 2);
现在,在InfoFetchActivity中,我有一个按钮,它获取A editText和spinnerItem的值,并按如下方式设置callingActivity的结果:
Button btnGo = (Button) findViewById(R.id.btn_go);
btnGo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText classView = (EditText) findViewById(R.id.userClassName);
Intent intent = new Intent();
intent.putExtra("INST_NAME",instValue[0]);
intent.putExtra("CLASS_NAME",classView.getText().toString());
setResult(RESULT_OK,intent);
finish();
}
});
在HomeActivity中成功获得此结果并使用我更新ListView项目获得的结果。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mDrawerList = (ListView) findViewById(R.id.left_drawer_list);
classNameRecd = data.getStringExtra("CLASS_NAME");
instNameRecd = data.getStringExtra("INST_NAME");
if(requestCode == 2){
icons = getResources().obtainTypedArray(R.array.itemIcons);
updatedTitles= getResources().getStringArray(R.array.itemHeadings);
//getting the data
updatedTitles[0]=classNameRecd;
updatedTitles[1]=instNameRecd;
SparseArray<MyListItem> finalList = new SparseArray<>();
final ListView mDrawerList = (ListView) findViewById(R.id.left_drawer_list);
//update the list
for(int i=0;i<updatedTitles.length;i++){
MyListItem tempItem = new MyListItem(icons.getDrawable(i),updatedTitles[i]);
finalList.append(i,tempItem);
}
//setting adapter
myListAdapter myAdapter = new myListAdapter(this,updatedTitles,icons,finalList,findViewById(R.id.left_drawer),mDrawerLayout);
mDrawerList.setAdapter(myAdapter);
}
}
问题是...... 我必须启动InfoFetchActivity一次才能获得结果一次。不应再次访问该活动。 为此,我使用了SharedPreferences:
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
if(pref.getBoolean("activity_executed", false)){
Intent intent = new Intent();
intent.putExtra("INST_NAME",instValue[0]);
intent.putExtra("CLASS_NAME",classView.getText().toString());
setResult(RESULT_OK,intent);
finish();
} else {
SharedPreferences.Editor ed = pref.edit();
ed.putBoolean("activity_executed", true);
ed.apply();
}
在第一次启动时,即第一次启动InfoFetchActivity时,结果符合要求,一切正常。但是当我重新打开应用程序时,列表中更新的前两项是空的。 请建议我如何保留onActivityResult中获得的值,这样我就不必一次又一次地设置结果。
P.S:这是我关于SO的第一个问题。请不要介意这个冗长的问题。提前致谢。由于声誉较低,无法发布截图。
更新:这是我的愚蠢无知。我忘了将InfoFetchActivity中的结果声明为静态。 另外,我将结果设置在sharedPrefs和我的按钮clicklistener中。谢谢。
private static String className;
private static String instName;