在设置活动中更改文本后,它没有被反映出来

时间:2015-09-02 05:05:17

标签: android android-studio

在Udacity教程(天气应用程序)的帮助下制作我的第一个Android应用程序。

对于设置活动,我有一个文本框,其中包含位置值。

例如,德克萨斯州。 但是当我将其更改为任何其他值时,它在应用程序中的反映方式并不相同。但是,该文本框中的值正在变化。

在应用的SettingActivity中,我有以下代码,

git merge temp_branch_001

但截至今天addPreferencesFromResource(R.xml.pref_general); bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_location_key))); 已被弃用,所以我不确定如何在这方面继续进行。我该怎么改变它?

我的目标是更改位置文字中的值,当我继续使用mainActivity时,天气数据应反映更改位置的数据。

感谢。

编辑:

addPreferencesFromResource

以上是我更新值的代码。

public class MainActivityFragment extends Fragment {

    private ArrayAdapter<String> mForecastAdapter;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }
    private void updateWeather()
    {
        FetchWeatherTask weatherTask = new FetchWeatherTask();
        SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(getActivity());

        String location=prefs.getString(getString(R.string.pref_location_key),getString(R.string.pref_location_default));
        weatherTask.execute(location);
    }
    @Override
    public void onStart()
    {
        super.onStart();
        updateWeather();
    }

以上是来自settingActivity的代码。但正如我所说,public class SettingsActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref_general); bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_location_key))); setupActionBar(); } 已被弃用。所以这部分代码并没有真正起作用。

1 个答案:

答案 0 :(得分:0)

创建一个单独的类,如下所示,处理所有与prefs相关的操作,存储和恢复...

public class MyPrefs {
Context context;
SharedPreferences systemPrefs;
SharedPreferences.Editor editor;

static MyPrefs prefs;

public static final String DEFAULT_LOCATION = "DEFAULT_LOCATION";
public static final String SOME_DEFAULT_LOCATION = "London";

public static MyPrefs getInstance(Context context){
    if(prefs == null){
        prefs = new MyPrefs(context);
    }
    return prefs;
}

private MyPrefs(Context context) {
    this.context = context;
    this.systemPrefs = context.getSharedPreferences(Constants.USER_PREFS, Activity.MODE_PRIVATE);
    this.editor = systemPrefs.edit();
}

public String getDefaultLocation(){
    return systemPrefs.getString(DEFAULT_LOCATION, SOME_DEFAULT_LOCATION);
}

public void setDefaultLocation(String newLocation){
    editor.putString(DEFAULT_LOCATION, newLocation);
    editor.commit();
}

public void clear() {
    editor.clear();
    editor.commit();
}
}

并在任何活动类中使用它......

        MyPrefs myPrefs = MyPrefs.getInstance(this);
    //To get the location stored in prefs
    String locationFromPrefs = myPrefs.getDefaultLocation();

    //To store the location in prefs
    myPrefs.setDefaultLocation("New York");