不廢話,直接上代碼
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一遍以后有時間在來慢慢品味源碼。