0

Professional Android 2 Application Development の例に従って、次のように優先クラスを設定しました。

//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 および言語の慣例により、変数は小文字にする必要があります。

変数が小文字であるということは、変数の最初の文字を意味します。クラス MyClass があるとします。あなたはそれを宣言するでしょう

MyClass myClass;

そうすれば、インスタンス メソッドではなくクラス メソッドにアクセスしようとしていないことがわかります。

これは、== の代わりに .equals() を使用する必要がある理由についての良い説明です。

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

于 2010-08-29T22:43:44.300 に答える