ListPreferenceでカテゴリのリストを設定するのと同様の問題がありました。問題は、 setEntriesメソッドによるリストを使用して、ダイアログで表示されるオプションを変更できないことです(クリック リスナーでエントリを設定するのは遅すぎます)。
私にとっての解決策は、無効にする必要があるときに PreferenceFragment に通知するDrawerListenerを追加することでした。
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
final MainOptionsFragment fragment = (MainOptionsFragment) getFragmentManager().
findFragmentById(R.id.fragment_drawer);
mDrawerOptions = new DrawerLayout.SimpleDrawerListener() {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
fragment.onOpened();
}
};
mDrawerLayout.addDrawerListener(mDrawerOptions);
別の解決策は、ダイアログが準備される前にエントリを設定するonPrepareDialogBuilderメソッドを上書きすることです。
class CustomListPreference extends ListPreference {
@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
// TODO setEntries
super.onPrepareDialogBuilder(builder);
}
}