zoukankan      html  css  js  c++  java
  • 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一遍以后有时间在来慢慢品味源码。

  • 相关阅读:
    hdu1238 Substrings
    CCF试题:高速公路(Targin)
    hdu 1269 迷宫城堡(Targin算法)
    hdu 1253 胜利大逃亡
    NYOJ 55 懒省事的小明
    HDU 1024 Max Sum Plus Plus
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1257 最少拦截系统
    HDU 1069 Monkey and Banana
    HDU 1104 Remainder
  • 原文地址:https://www.cnblogs.com/draem0507/p/2741042.html
Copyright © 2011-2022 走看看