2013-06-22 54 views
4

我想实现一个ListPreference的子类,而其构造函数被调用(显示它时),它的重写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");  
    } 

为什么会发生这种情况?我错过了什么?

更新:我在onCreateDialogView()种植日志消息,并将其被调用了。

它只是onBindDialogView()而不是被调用。

为什么?这个回调被调用的条件是什么?

+1

你想在'onBindDialogView()'中做什么? – ozbek

+0

@shoerat我想[ListOnePreference]上的[setOnTouchListener()(http://stackoverflow.com/q/17192066)。 – scatmoi

回答

5

你的onCreateDialogView()返回什么?仅当您从那里返回非空的自定义视图时才调用onBindDialogView()。此外,onBindDialogView()仅在实际显示偏好时才会调用。参考号:Source code of DialogPreference。具体见showDialog()方法

如果你只是从你的onCreateDialogView()返回超级实现,我怀疑它返回null

+0

我的'onCreateDialogView()'返回它的'super.onCreateDialogView()'返回:** null **。如何在不更改原始ListPreference视图/布局的情况下使其返回非空值?我真的不想改变视图/布局中的任何东西。我真正想要的是获取原始ListPreference **视图**的句柄/引用。这是可能吗?如果是这样,怎么样? +1,谢谢。 – scatmoi

+0

似乎没有一个公共的API来获得一个List清单,该清单存放在ListPreference中。你有一个'DialogPreference#getDialog()' - 你可以将其转换为'AlertDialog()',从那里你可以做一个'getListView()',但这取决于很多实现细节,我不推荐它。我宁愿建议你创建一个自定义的“首选项”,你可以完全控制内容视图。 – curioustechizen

+0

其实,看到[这个评论](http://stackoverflow.com/questions/17181083/how-to-attach-gesturedetector-to-a-listpreference#comment25182806_17351742),但你很好地回答了我的问题,所以接受+赏金。 – scatmoi

相关问题