私はlanguage
としてListPreference
と表示されており、利用可能な言語リストを表示しています。 onCreateが呼び出されたときにリストを埋めることができますが、ユーザーがそれをクリックするとリストを埋めたいと思います。onPreferenceClickがトリガされたときにListPreferenceを動的に満たす方法を教えてください。
this is the java code
:
public class SettingsActivity extends PreferenceActivity implements OnPreferenceClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
addPreferencesFromResource(R.xml.settings);
} catch (Exception e) {
}
}
@Override
public boolean onPreferenceClick(Preference preference) {
if((preference instanceof ListPreference) && (preference.getKey().equals("language"))){
ListPreference lp = (ListPreference)preference;
CharSequence[] entries = { "English", "French" };
CharSequence[] entryValues = {"1" , "2"};
lp.setEntries(entries);
lp.setDefaultValue("1");
lp.setEntryValues(entryValues);
return true;
}
return false;
}
}
と、これはあるsettings.xml
(優先):私は検索が、何の結果が見つからなかっ
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="General Settings">
<CheckBoxPreference android:key="enabled" android:title="Application Status" android:summary="Enable or disable the application" />
<ListPreference
android:key="language"
android:title="Language"
android:dialogTitle="Application language"
android:summary="Select the Application language"
/>
</PreferenceCategory>
</PreferenceScreen>
!そのリストをクリックするたびに例外が発生します。
この回答は機能しますが、 setListPreferenceDataにonClick(onCReateではなく)だけを実行させると、ちょっとバグがあります。これは、 です。なぜなら、setListPreferenceDataメソッドでは、1秒未満の小計 が必要な場合、データが設定される前にデフォルトリストが表示され、 ユーザーは強制的にキャンセルして再度環境設定を開くためです。 既に表示されているlistPreferenceを更新する方法はありますか? setListPreferenceDataの終了後に? – Malabarba
カスタムビヘイビアが必要な場合は、おそらく 'ListPreference'や' Preference'を拡張するのがベストでしょう。純粋に「ソーシャル」の回避策は、デフォルトのリストアイテムの値を –
ccpizza
のように設定することです。ええ、私は自分自身でlistpreferenceを拡張する必要がありました。しかし、それほど悪くはありませんでした。 onCreateは、オーバーロードが必要な唯一のメソッドでした。 – Malabarba