2013-05-16 148 views
0

我正在尝试查看单选按钮的对话框,但是当我单击按钮时,警告对话框从不出现。以下是代码。请让我知道是否有任何替代解决方案。这个样本来自API演示。当点击按钮时显示AlertDialog

public class MainPage extends Activity{ 
Button start; 
private static final int DIALOG_SINGLE_CHOICE = 1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainpage); 
    start = (Button) findViewById(R.id.start); 
    start.setBackgroundResource(R.drawable.read); 
    start.setOnClickListener(new View.OnClickListener() { 
     @SuppressWarnings("deprecation") 
     public void onClick(View v) { 

      showDialog(DIALOG_SINGLE_CHOICE); 

     } 
    }); 

} 

@Override 
@Deprecated 
protected Dialog onCreateDialog(int id) { 
    id = DIALOG_SINGLE_CHOICE; 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Choose your option"); 
    builder.setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 

     } 
    }) 
    .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        /* User clicked Yes so do some stuff */ 
       } 
      }) 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        /* User clicked No so do some stuff */ 
       } 
      }) 
      .create(); 
    return super.onCreateDialog(id); 
     } 
    } 
} 

回答

2

创建此功能,并使用showAskDialog()函数在点击事件

private void showAskDialog() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("DialogTitle").setMessage("DialogMessage").setCancelable(true).setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 

       } 
       }).setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 

        dialog.cancel(); 
       } 
      }).setPositiveButton("YES", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 

        dialog.cancel(); 
       } 
      }); 
    // before @TronicZomB advice 
    //AlertDialog alert = builder.create(); 
    //alert.show(); 
    // after @TronicZomB advice 
    builder.show(); 
} 
+1

'.create()'是不必要的。在Builder上调用'.show()'将会创建它并将其显示在一行代码中。使用'.create()'的唯一原因是你可以在其他地方多次调用'.show()',但在这种情况下它不是必需的。 – TronicZomB

1

您需要return builder.show();更换return super.onCreateDialog(id);.create()将从构建器创建一个警告对话框,但它不显示该对话框。 .show()将从构建器创建对话框并将其显示在屏幕上。

我也认为int id可能是不必要的。你可以尝试下面的代码,它应该为你工作:

public class MainPage extends Activity{ 
Button start; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.mainpage); 
start = (Button) findViewById(R.id.start); 
start.setBackgroundResource(R.drawable.read); 
start.setOnClickListener(new View.OnClickListener() { 
    @SuppressWarnings("deprecation") 
    public void onClick(View v) { 

     showDialog(DIALOG_SINGLE_CHOICE); 

    } 
}); 

} 

@Override 
public Dialog onCreateDialog() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Choose your option"); 
    builder.setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 

     } 
    }) 
    .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        /* User clicked Yes so do some stuff */ 
       } 
      }) 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        /* User clicked No so do some stuff */ 
       } 
      }); 
     return builder.show(); 
     } 
    } 
} 
0

你就错了里面onCreateDialog()

首先,您不应该这样做id = DIALOG_SINGLE_COICE,但如果它等于DIALOG_SINGLE_CHOICE则测试id值。 *如果是,则使用AlertDialog.Builder创建Dialog并返回builder.create()。 *如果不是,请返回super.onCreateDialog(id)

但是,此方法已被弃用,您应该使用DialogFragment来代替。

+0

'.create()'不会显示对话框。你需要返回'builder.show()'在你的“*如果是...” – TronicZomB

0
public class MainActivity extends Activity implements OnClickListener{ 
private Button button; 
private static final int DIALOG_SINGLE_CHOICE = 1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(this); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.button: 
     showDialog(DIALOG_SINGLE_CHOICE); 
     break; 

    default: 
     break; 
    } 
} 

@Override 
@Deprecated 
protected Dialog onCreateDialog(int id) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Choose your option"); 
    builder.setSingleChoiceItems(R.array.Baani, 0, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 
     } 

    }).setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 

      /* User clicked Yes so do some stuff */ 
     } 
    }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 

      /* User clicked No so do some stuff */ 
     } 
    }).create().show(); 
    return super.onCreateDialog(id); 
} 
}