如何在“创建”中检索共享首选项?

时间:2013-05-21 08:15:31

标签: android sharedpreferences

在首选项中,我想根据单位类型(Imprial或metric)更改首选项视图。在create方法中,我正在检查最后一个值是什么 measurement_unit首选项,但始终在应用启动时返回指标。 我还有一个OnSharedPreferenceChangeListener,我根据用户输入更改视图,这是有效的。如何调用onCreate时获取保存的首选项?

public class PrefMainActivity extends PreferenceActivity{
    String TAG="BlueGlucose";

  @Override
  public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);  
        actionBar.setTitle(R.string.action_settings);

        this.init_view();

    }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {   
      switch (item.getItemId()) {
          case android.R.id.home:
              finish();
              return true;

          default:
              return super.onOptionsItemSelected(item);
      }
  }

  SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
          SharedPreferences.OnSharedPreferenceChangeListener() {

            @Override
            public void onSharedPreferenceChanged(
                    SharedPreferences sharedPreferences, String key) {              
                PrefMainActivity.this.init_view();

            }
// your stuff here
};


    private void init_view(){   
        try
        {
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
            String metric = getResources().getString(R.string.imperial);

            if (prefs.getString("measurement_unit",metric)  == metric)
                getFragmentManager().beginTransaction().replace(android.R.id.content,
                    new PrefMainFragmentImperial()).commit();
            else
                getFragmentManager().beginTransaction().replace(android.R.id.content,
                        new PrefMainFragmentMetric()).commit();


            prefs.registerOnSharedPreferenceChangeListener(spChanged);
        }
        catch(Exception ex)
        {

        }
    }

1 个答案:

答案 0 :(得分:1)

        if (prefs.getString("measurement_unit",metric)  == metric)

java中的字符串需要通过equalsequalsIgnoreCase

进行比较