0

私はリスト設定に取り組んでおり、リスト設定で選択されている項目に基づいてテキストビューのテキストを変更するために OnSharedPreferenceChangeListener を実装しました。ただし、変更は記録されず、アイデアが不足しているため、助けていただければ幸いです。ありがとう

public class pref extends PreferenceActivity implements OnSharedPreferenceChangeListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.prefs);
    setContentView(R.layout.main);

    TextView text = (TextView) findViewById(R.id.textView1);
    String keys = null;
    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    pref.registerOnSharedPreferenceChangeListener(this);


    keys = pref.getString("listPref1", "");
    if (keys == "ON")
    {
        text.setText("ON");
    }
    else if (keys == "OFF")
    {
        text.setText("OFF");
    }
    else{
        text.setText("Choose One");
    }
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    //What code to I put in here to have the listener register the change
}

}

4

4 に答える 4

2

ご協力いただきありがとうございます。ほとんどを整理しました。コードは次のとおりです。

SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(this);

    TextView text = (TextView) findViewById(R.id.textView1);

    if (prefs.getString("listPref1", "").equals("OFF")) {
        text.setText("goodbye");
    } else if (prefs.getString("listPref1", "").equals("ON")) {
        text.setText("hello");
    }

    prefs.registerOnSharedPreferenceChangeListener(this);

}

@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    TextView text = (TextView) findViewById(R.id.textView1);

    if (prefs.getString("listPref1", "").equals("OFF")) {
        text.setText("goodbye");
    } else if (prefs.getString("listPref1", "").equals("ON")) {
        text.setText("hello");
    }
}

}

ご覧のとおり、if/else ステートメントを繰り返す必要があります。リスナーにのみ配置すると、変更が行われるまで何も取得されず、リスナーの外側にのみある場合は、アプリが最初に実行され、変更が行われたときにのみ読み取られます。未登録。

変更が行われ、コードが再実行されることをリスナーに通知させるコードはありませんか?

于 2011-05-08T08:09:27.950 に答える
0

You don't have any code to actually update your SharedPreferences. The listener will only be triggered when your pref object is edited. Example...

pref.edit().putString("listPref1", "ONE").commit();
于 2011-05-07T18:11:28.680 に答える