• androidalertDialog无法显示按钮的bug


    不废话,直接上代码

     1 @Override
     2             public void onTabChanged(String tabId) {
     3                 Builder builder = new AlertDialog.Builder(
     4                         TabWidgetActivity.this);
     5                 builder.setTitle("选项卡弹窗");
     6 
     7                 // builder.setMessage("您选中了第"+tabId+"个选项卡");//tabId 获取的是选项卡的id
     8                 builder.setMessage("您选中了第" + mTabHost.getCurrentTab() + "个选项卡");
     9                 // builder.setIcon(R.drawable.icon);
    10                 AlertDialog dialog = builder.create();
    11                 builder.setPositiveButton("确定", new OnClickListener() {
    12                     @Override
    13                     public void onClick(DialogInterface dialog, int which) {
    14                         Toast.makeText(TabWidgetActivity.this, "您点击了确定按钮",
    15                                 Toast.LENGTH_LONG).show();
    16                         dialog.cancel();
    17                     }
    18                 });
    19                 builder.setNegativeButton("取消", new OnClickListener() {
    20 
    21                     @Override
    22                     public void onClick(DialogInterface dialog, int which) {
    23                         Toast.makeText(TabWidgetActivity.this, "您点击了取消按钮",
    24                                 Toast.LENGTH_LONG).show();
    25                         dialog.cancel();
    26                     }
    27                 });
    28 
    29                 dialog.show();
    30             }
    31         });

    发现确定和取消的按钮没有显示出来

    注意代码中黑体字 AlertDialog dialog = builder.create();的位置

    修改代码后的

    修改后的代码

     1 @Override
     2             public void onTabChanged(String tabId) {
     3                  Builder builder=new AlertDialog.Builder(TabWidgetActivity.this);
     4                 builder.setTitle("选项卡弹窗");
     5                 
     6                 //builder.setMessage("您选中了第"+tabId+"个选项卡");//tabId 获取的是选项卡的id
     7                 builder.setMessage("您选中了第"+mTabHost.getCurrentTab()+"个选项卡");
     8                 //builder.setIcon(R.drawable.icon);
     9                  
    10                 builder.setPositiveButton("确定", new OnClickListener() {
    11                     @Override
    12                     public void onClick(DialogInterface dialog, int which) {
    13                         Toast.makeText(TabWidgetActivity.this, "您点击了确定按钮", Toast.LENGTH_LONG).show();
    14                         dialog.cancel();
    15                     }
    16                 });
    17                 builder.setNegativeButton("取消", new OnClickListener() {
    18                     
    19                     @Override
    20                     public void onClick(DialogInterface dialog, int which) {
    21                         Toast.makeText(TabWidgetActivity.this, "您点击了取消按钮", Toast.LENGTH_LONG).show();
    22                         dialog.cancel();
    23                     }
    24                 });
    25                 
    26                 AlertDialog dialog=    builder.create();
    27                 dialog.show();
    28             }
    29         });

    注意此时 AlertDialog dialog= builder.create();的位置

    
    

    其实对比不难发现,为题在于创建alertDialog的时候,也就是create()方法被触发的时候,如果这时候还没绑定setPositiveButton和setNegativeButton 那么创建对话框之后也无法引用到builder的一些属性资源。(表示相当的拗口)

    观察create的源码

     1 public AlertDialog create() {
     2             final AlertDialog dialog = new AlertDialog(P.mContext);
     3             P.apply(dialog.mAlert);
     4             dialog.setCancelable(P.mCancelable);
     5             dialog.setOnCancelListener(P.mOnCancelListener);
     6             if (P.mOnKeyListener != null) {
     7                 dialog.setOnKeyListener(P.mOnKeyListener);
     8             }
     9             return dialog;
    10         }

    就知道为什么不能在引用builder对应了。

    由于时间原因,就不深入研究,等把android的基础read一遍以后有时间在来慢慢品味源码。

  • 相关阅读:
    睡眠错误
    Linux中安装Mysql授权远程访问
    lamp安装
    MySQL 数据类型(Day41)
    MySQL 表操作 (Day40)
    MySQL之存储引擎(Day39)
    MySQL下载安装
    python并发编程之IO模型(Day38)
    同步锁,死锁现象与递归锁,信息量Semaphore.....(Day36)
    多线程并发练习(Day35)
  • 原文地址:https://www.cnblogs.com/draem0507/p/2741042.html
Copyright © 2020-2023  润新知