直到我致电Show ..才能在AlertDialog中找不到按钮。为什么?创建后不应该可用吗?

| 我有一个警报对话框,我有2个文本字段,然后有一个“正”和“负”按钮。 我试图将最终文本字段上的nextFocusDown设置为始终为肯定按钮。 正负按钮在第二个文本字段下方彼此并排布置,如果用户输入的光标位于左侧按钮上方,则nextfocus将移至左侧按钮,如果位于右侧按钮上方,则其焦点将移至右侧按钮。 因此,我使用警报生成器创建警报对话框,然后尝试调用 myAlertDialog.getButton(DialogInterface.BUTTON_POSITIVE); 然后将ExitText字段nextFocusDownId设置为该按钮的ID。 并在向用户显示“警报”之前执行此操作,因此在任何赛车条件下我都没有丝毫机会。 ad,ad.getButton每次都返回NULL。当我将这些代码行移至ad.show()调用之后时,一切正常。 所以我想我的问题是,有人可以向我解释一下。我想我一旦设置好正按钮并创建了AlertDialog,该视图应该存在但不可见...显然不是这种情况,因此在视图实际显示为a之前,不会创建DisplayWidget一般的经验法则?当视图膨胀时,我可以在显示视图之前在其中找到对象。那么关于此的一般经验法则是什么?     
已邀请:
        我认为您的最终声明/问题是正确的。对话框上对“ 0”的调用会放大并显示视图。因此从某种意义上说,除非显示对话框,否则您无法与代码中的视图进行交互。如果您操纵对话框的代码是直接在调用code0ѭ之后出现的,那么我认为没有什么竞争条件。 具体来说,这是javadoc所说的:   
show()
-启动对话框并显示在屏幕上。 因此,在调用ѭ0until之前,对话框不会“启动”。     
        这是填充对话框的代码示例。可能是您应该使用类似的方法,然后设置您的按钮:
LayoutInflater li = LayoutInflater.from(ctx);
View view = li.inflate(R.layout.promptdialog, null);
//get a builder and set the view
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setTitle(\"Prompt\");
builder.setView(view);
    
        这些是使用“ 5”的限制。如建议的那样,您的视图尚未膨胀。这并不一定意味着在显示对话框之前,无法访问这些视图。您可以自己增加视图并随意修改。请参阅有关自定义对话框的文档。您可以膨胀自己的视图,然后使用
setView
View
设置为
Dialog
。不幸的是,这确实抵消了
Builder
提供的许多简单性。     

要回复问题请先登录注册