不废话,直接上代码
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 @Override13 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 @Override22 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 @Override12 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 @Override20 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一遍以后有时间在来慢慢品味源码。