在android中主要活动中接收首选项更改

时间:2015-02-15 22:56:58

标签: java android

我的Android应用程序出现问题。这是一个简单的应用程序,它将在主Activity中绘制一个指定大小的矩形,超出图像视图的范围。问题是接收更改的首选项的值,该值是矩形的宽度或高度的大小。我尝试了多种方法。现在我有我的主要活动,一个首选项片段和一个ShowPreferences活动,主活动只是使用它来创建一个意图并启动该意图以显示首选项片段。这样做是为了当我按下后退按钮时它返回主屏幕而没有问题。我试图在SettingsFragment中侦听首选项更改,但问题是我无法访问main活动中的变量,因为在SettingsFragment中调用getActivity()会返回ShowPreferences,因为这在技术上是通过intent调用它的活动。因此,我继续通过主要活动检测偏好变化。现在问题是findPreference()方法无法解析,因为它在主活动而不是SettingsFragment类中。如何将密钥转换为EditTextPrefernce实例,以便对主Activity中的变量进行必要的更改。非常感谢任何其他建议我是android开发的新手。 :)
这是我现在的代码。

SettingsFragment(以前是onSharedPreferenceChangeListener)

public class SettingsFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
    }
}

ShowPreferences(只是为了显示首选项屏幕并允许正确的后退按钮行为)

public class ShowPreferences extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_preferences);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();

    }
}

在主活动中,onSharedPreferencesChangedListener

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    Preference pref = mContext.findPreference(key);
    if (pref instanceof EditTextPreference) {
        EditTextPreference etp = (EditTextPreference) pref;
        //now what?
        int newValue = Integer.parseInt(etp.getText());

        if(etp.toString().equals("Rectangle Width")){
            rectWidth = newValue;
        } else if (etp.toString().equals("Rectangle Height")){
            rectHeight = newValue;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

使用密钥直接从SharedPreferences中检索值。

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if(key.equals("myKey"){
            int newValue = Integer.parseInt(sharedPreferences.getString(key, "0"));
        }
}