0

按照 Professional Android 2 Application Development 的示例,我设置了一个 pref 类,如下所示:

//Preferences.java
public class Preferences extends PreferenceActivity{
    public static final String PREF_SPEED_UNIT ="PREF_SPEED_UNIT";
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.userpreferences);
    }  
}

在我的活动课上:

// main.java 

private static final int SHOW_PREFERENCES = 1;

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == SHOW_PREFERENCES)
        updateFromPreferences();
        if (resultCode == Activity.RESULT_OK) {
        }   
}

private void updateFromPreferences() {
    Log.d(TAG, "updateFromPreferences()");
    Context context = getApplicationContext();
    SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(context);
    // Set the SpeedMode string using object reference to custom view
    mSpeedMode = prefs.getString(Preferences.PREF_SPEED_UNIT, "MPH");
    speedview.SpeedMode = mSpeedMode;  
}
// Using have a Button view that pops the options for testing
private OnClickListener optionbuttonCL = new OnClickListener() {
    public void onClick(View v) {
        Context context = getApplicationContext();
        Intent i = new Intent(context, Preferences.class);
        startActivityForResult(i, SHOW_PREFERENCES);
    }
};

问题在这里:

    // SpeedView.java
    if (SpeedMode == "MPH"){
        // set speed in miles/hour
    }
    if (SpeedMode == "KPH"){
        //set speed in kilometers/hour
    }

它可以工作,但是如果我将速度模式切换到 KPH(默认为 MPH),则显示不再更新。

令人困惑的是,即使使用 Eclipse 调试器将 SpeedMode 显示为“MPH”或“KPH”,if 语句也不会执行。

这是其余的代码:

//userpreferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference android:key="PREF_SPEED_UNIT"
    android:title="Speed Unit" 
    android:summary="Choose between MPH or KPH"
    android:entries="@array/speed_options" 
    android:entryValues="@array/speed_values"
    android:dialogTitle="Speed Unitz" 
    android:defaultValue="MPH" />
</PreferenceScreen>


// arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="speed_options">
    <item>MPH</item>
    <item>KPH</item>
</string-array>
<string-array name="speed_values">
    <item>MPH</item>
    <item>KPH</item>
</string-array>

谢谢

4

1 回答 1

4

是什么speedview.SpeedMode?它在哪里声明。我敢打赌你的问题是

SpeedMode == "MPH"

将其更改为

Speedmode.equals("MPH");

此外,按照 java 和使用 camelCase 的语言的约定,变量应该是小写的。

变量是小写的,我的意思是变量的第一个字母。所以如果你有一个 MyClass 类。你会宣布它

MyClass myClass;

这样你就知道你不是在尝试访问类方法而不是实例方法。

这是一个很好的解释为什么你需要使用 .equals() 而不是 ==

http://leepoint.net/notes-java/data/expressions/22compareobjects.html

于 2010-08-29T22:43:44.300 回答