保留onActivityResult中获得的结果

时间:2015-01-03 15:08:44

标签: android listview sharedpreferences adapter onactivityresult

我有两个活动,一个是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;

0 个答案:

没有答案