我的Android应用程序出现问题。这是一个简单的应用程序,它将在主Activity中绘制一个指定大小的矩形,超出图像视图的范围。问题是接收更改的首选项的值,该值是矩形的宽度或高度的大小。我尝试了多种方法。现在我有我的主要活动,一个首选项片段和一个ShowPreferences活动,主活动只是使用它来创建一个意图并启动该意图以显示首选项片段。这样做是为了当我按下后退按钮时它返回主屏幕而没有问题。我试图在SettingsFragment中侦听首选项更改,但问题是我无法访问main活动中的变量,因为在SettingsFragment中调用getActivity()会返回ShowPreferences,因为这在技术上是通过intent调用它的活动。因此,我继续通过主要活动检测偏好变化。现在问题是findPreference()方法无法解析,因为它在主活动而不是SettingsFragment类中。如何将密钥转换为EditTextPrefernce实例,以便对主Activity中的变量进行必要的更改。非常感谢任何其他建议我是android开发的新手。 :)
这是我现在的代码。
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
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();
}
}
@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;
}
}
}
答案 0 :(得分:0)
使用密钥直接从SharedPreferences中检索值。
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.equals("myKey"){
int newValue = Integer.parseInt(sharedPreferences.getString(key, "0"));
}
}