2013-06-22 8 views
4

Я пытаюсь реализовать подкласс ListPreference, а его конструктор - это, который вызывается (при его отображении), его overriden onBindDialogView не является.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");  
    } 

Почему это происходит? Что мне не хватает?

Update: Я насадил сообщение войти onCreateDialogView() и это называют, тоже.

Это только onBindDialogView(), то есть не.

Почему? Каковы условия для вызова этого обратного вызова?

+1

Что вы пытаетесь сделать в 'onBindDialogView()'? – ozbek

+0

@shoerat Я пытаюсь [setOnTouchListener() в ListPreference] (http://stackoverflow.com/q/17192066). – scatmoi

ответ

5

Что возвращает ваш номер onCreateDialogView()? onBindDialogView() вызывается только в том случае, если вы возвращаете ненулевой пользовательский вид из него. Кроме того, onBindDialogView() вызывается только тогда, когда вы действительно показываете предпочтение. Ref: Source code of DialogPreference. В частности, см. showDialog() метод

Если вы только что вернули супер реализацию из своего onCreateDialogView(), я подозреваю, что он возвращает null.

+0

My 'onCreateDialogView()' возвращает то, что возвращает 'super.onCreateDialogView()': ** null **. Как заставить его возвращать ненулевое значение без изменения исходного представления/макета ListPreference? Я не хочу ничего менять в представлении/макете. Все, что мне действительно нужно, это получить ручку/ссылку на исходный список ListPreference ** **. Это вообще возможно? Если да, то как? +1 и спасибо. – scatmoi

+0

Кажется, что нет публичного API, чтобы получить дескриптор 'ListView', который размещается внутри' ListPreference'. У вас есть 'DialogPreference # getDialog()' - который вы можете использовать для 'AlertDialog()', и оттуда вы можете сделать 'getListView()', но это зависит от множества деталей реализации, и я бы не рекомендовал Это. Я бы предпочел предложить вам создать пользовательский «Предпочтение», где вы полностью контролируете представление контента. – curioustechizen

+0

На самом деле, см. [Этот комментарий] (http://stackoverflow.com/questions/17181083/how-to-attach-gesturedetector-to-a-listpreference#comment25182806_17351742), но вы так хорошо ответили на мой вопрос, так что принимайте + щедрость , – scatmoi

Смежные вопросы