onBindDialogView не е извикан - Защо?

Опитвам се да внедря подклас на ListPreference и докато неговият конструктор е се извиква (при показването му), неговото заместване onBindDialogView не е.

  public MyListPreference(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
    Log.v(TAG, "MyListPreference constructed.");
  }


  @Override
  protected void onBindDialogView(View view) {
    super.onBindDialogView(view);
    Log.v(TAG, "onBindDialogView called");    
  }

Защо се случва това? какво ми липсва

Актуализация: Добавих регистрационно съобщение в onCreateDialogView() и той също се извиква.

Това е само onBindDialogView() който не е извикан.

Защо? Какви са условията за извикване на това обратно извикване?


person scatmoi    schedule 22.06.2013    source източник
comment
Какво се опитваш да правиш в onBindDialogView()?   -  person ozbek    schedule 26.06.2013
comment
@shoerat Опитвам се да setOnTouchListener() на ListPreference.   -  person scatmoi    schedule 27.06.2013


Отговори (1)


Какво връща вашият onCreateDialogView()? onBindDialogView() се извиква само ако върнете ненулев потребителски изглед от там. Освен това onBindDialogView() се извиква само когато действително покажете предпочитанието. Препратка: Източник код на DialogPreference. По-специално вижте showDialog() метод

Ако просто върнете супер изпълнението от вашия onCreateDialogView(), подозирам, че връща null.

person curioustechizen    schedule 26.06.2013
comment
Моят onCreateDialogView() връща това, което връща super.onCreateDialogView(): null. Как да го накарам да връща ненулево, без да променя оригиналния изглед/оформление на ListPreference? Наистина не искам да променям нищо в изгледа/оформлението. Всичко, което наистина искам, е да получа манипулатор/препратка към оригиналния изглед на ListPreference. Това изобщо възможно ли е? Ако е така, как? +1 & благодаря за сега. - person scatmoi; 27.06.2013
comment
Изглежда, че няма публичен API за получаване на манипулатор на ListView, който се помещава в ListPreference. Имате DialogPreference#getDialog() - което можете да прехвърлите към AlertDialog(), а оттам можете да направите getListView(), но това зависи от много подробности за изпълнението и не бих го препоръчал. По-скоро бих ви предложил да създадете персонализиран Preference, където имате пълен контрол върху изгледа на съдържанието. - person curioustechizen; 27.06.2013
comment
Всъщност вижте този коментар, но вие отговорихте на въпроса ми така добре, така че приемане + награда. - person scatmoi; 28.06.2013
comment
Как да хванете целия диалогов прозорец и да зададете посоката му (например, за да го поддържате като RTL)? - person android developer; 26.05.2014