Android:如何在列表视图中维护设置数据

时间:2016-12-23 11:25:59

标签: android

活动A 中,我点击一个按钮转到活动B 。我使用Bundle将数据带回活动A ,然后我设法更改了String value中的ListView。然后我转到另一个活动C 来操纵另一个数据。问题是,当我再次回到活动A 时,来自活动C 的数据会反映在ListView中,但之前的数据来自于活动B 消失了。

以下是活动A 活动B 的代码。

private void gotoRepeatWeeklyOptionActivity() {
    Intent intent = new Intent(CreateNewAlarmActivity.this, RepeatWeeklyOptionActivity.class);
    startActivity(intent);
    finish();
}

这是从活动A 活动C 的方法。

private void openAlarmToneOptionDialog() {
    Intent intent = new Intent(CreateNewAlarmActivity.this, ChooseAlarmToneActivity.class);
    startActivity(intent);
}

这是一个代码,可以从活动B 中获得活动A

@Override
public void onBackPressed() {
    Intent intent = new Intent(this, CreateNewAlarmActivity.class);

    ArrayList<Integer> repeatStatusIntList = new ArrayList<>();
    intent.putExtra(Keys.OPTION, Keys.OPTION_REPEAT);

    if(cbRepeatEveryDay.isChecked()) {
        super.onBackPressed();
        intent.putExtra(Keys.VALUE, Keys.EVERY_DAY);
        Toast.makeText(this, getString(R.string.alarm_will_repeat_every_day), Toast.LENGTH_SHORT).show();
    } else if(allUnchecked()) {
        super.onBackPressed();
        intent.putExtra(Keys.VALUE, Keys.NO_REPEAT);
        Toast.makeText(this, getString(R.string.alarm_will_never_repeat), Toast.LENGTH_SHORT).show();
    } else {
        for(int i=0; i<repeatStatusList.size(); i++) {
            super.onBackPressed();
            if(repeatStatusList.get(i).isChecked()) {
                repeatStatusIntList.add(getRepeatStatusInt(repeatStatusList.get(i)));
                intent.putIntegerArrayListExtra(Keys.KEY_REPEAT_STATUS_INTEGERS_LIST, repeatStatusIntList);
            }

            intent.putExtra(Keys.VALUE, Keys.ON);
        }
        Toast.makeText(this, getString(R.string.alarm_will_repeat) + getString(R.string.every) +
                getAllRepeatDays(repeatStatusList), Toast.LENGTH_SHORT).show();
    }
    startActivityForResult(intent, RESULT_OK);
    finish();
}

最后,这是来自活动C 的代码,它会返回活动A

    btnSelectTone.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getApplicationContext(), CreateNewAlarmActivity.class);
            intent.putExtra(Keys.OPTION, Keys.OPTION_ALARM_TONE);
            intent.putExtra(Keys.VALUE, ringtone);

            if(mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
                mediaPlayer.release();
            }
            startActivityForResult(intent, RESULT_OK);
            finish();
        }
    });

以下是Activity A的示例屏幕。 enter image description here

1 个答案:

答案 0 :(得分:0)

Atif所建议的是一种最适合您的解决方案。 否则,您可以使用下面的共享首选项。获取SP实例并提交要在编辑器中共享的数据

// We need an Editor object to make preference changes.
      // All objects are from android.context.Context
      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putBoolean("silentMode", mSilentMode);

      // Commit the edits!
      editor.commit();
    }

这就是你可以检索共享的pref数据的方法

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       boolean silent = settings.getBoolean("silentMode", false);

我个人建议您在developer.android.com上浏览更多信息或访问以下链接 https://developer.android.com/guide/topics/data/data-storage.html#pref

将来,如果你有大量的数据,那么上述解决方案就无法运作。

请按照以下链接获取更多选项

How to pass the values from one activity to previous activity