如何:为AlertDialog中的切换按钮实现OnClick侦听器?

时间:2013-06-28 10:56:50

标签: android alertdialog onclicklistener togglebutton

在我的Android应用程序中,我制作了自定义警报对话框。它会在按钮单击时打开。在那个对话框中有4个togglebuttons应该像radiobuttons一样反应。我不想出于设计原因使用radiobuttons。

我无法完成为这些togglebuttons实现onClick Listener。我以某种方式得到它们,只有一个按钮可以“打开”,其余部分应该关闭。 (就像RadioButton集团一样)

我目前无法上传具有声誉的图片,因此这里是xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Dlg_DrvPut"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical|center_horizontal"
    android:text="@string/DrvPutDlgTitle"
    android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_x="1dp"
    android:layout_y="3dp"
    android:gravity="center_vertical|center_horizontal"
    android:text="@string/DrvPutDlgDrvCap" />
<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:shrinkColumns="*"
    android:stretchColumns="*"  >
<TableRow
        android:id="@+id/tableRow1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">"
        <ToggleButton
            android:id="@+id/rb_hit"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"

            android:textOn="Hit"
            android:textOff="Hit"
            android:layout_column="0" >
        </ToggleButton>
        <ToggleButton
            android:id="@+id/rb_left"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"

            android:textOn="Left"
            android:textOff="Left"
            android:layout_column="1" />
        <ToggleButton
            android:id="@+id/rb_right"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"

        android:textOn="Right"
            android:textOff="Right"

            android:layout_column="2" />
        <ToggleButton
            android:id="@+id/rb_miss"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"

            android:textOn="Miss"
            android:textOff="Miss"
            android:layout_column="3" />
      </TableRow>
   </TableLayout>
        <EditText
            android:id="@+id/drvDst"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="number" >
        </EditText>
  <TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_x="1dp"
    android:layout_y="3dp"
    android:gravity="center_vertical|center_horizontal"
    android:text="@string/DrvPutDlgPutCap" />

     <EditText
         android:id="@+id/putDst"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:ems="10"
         android:inputType="numberDecimal" />

</LinearLayout>

如何做到这一点?

我尝试了提到的onCheckedChangeListener,但这似乎在AlertDialogBu​​ilder中不可用。 这是在按下按钮以显示alertdialog后将运行的代码。 这是现在正在运行的代码,每个切换按钮都有一个onCheckedChangeListener。如果用户选中其中一个按钮,则所有其他切换按钮的已检查状态将设置为false。

public void pDrvPutClick(View v) {
     final Button b = (Button) v;

      LayoutInflater inflater = getLayoutInflater();
     View dstView = inflater.inflate(R.layout.dlg_drvput, null);

      AlertDialog.Builder builder = new AlertDialog.Builder(context);
     builder.setView(dstView);
     final EditText edit_ddst = (EditText) dstView.findViewById(R.id.drvDst);
     final EditText edit_pdst = (EditText) dstView.findViewById(R.id.putDst);
     final ToggleButton rb1 = (ToggleButton) dstView.findViewById(R.id.rb_hit); 
     final ToggleButton rb2 = (ToggleButton) dstView.findViewById(R.id.rb_left);
     final ToggleButton rb3 = (ToggleButton) dstView.findViewById(R.id.rb_right);
     final ToggleButton rb4 = (ToggleButton) dstView.findViewById(R.id.rb_miss);

    rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
     @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
     {
         if ( isChecked )
         {
             rb2.setChecked(false);
             rb3.setChecked(false);
             rb4.setChecked(false);
         }
     }
     });

     rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
         @Override
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
         {
             if ( isChecked )
             {
                 rb1.setChecked(false);
                 rb3.setChecked(false);
                 rb4.setChecked(false);
             }
         }
         });
     rb3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
         @Override
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
         {
             if ( isChecked )
             {
                 rb1.setChecked(false);
                 rb2.setChecked(false);
                 rb4.setChecked(false);
             }
         }
         });
     rb4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
         @Override
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
         {
             if ( isChecked )
             {
                 rb1.setChecked(false);
                 rb3.setChecked(false);
                 rb2.setChecked(false);
             }
         }
         });



     builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
         public void onClick(DialogInterface dialog, int whichButton){
             String ddst;
             ddst = edit_ddst.getText().toString();
             if (ddst=="") {
                ddst="Drive";    
             }else {
                 if (rb1.isChecked()){
                     ddst="H"+ddst;
                 }
                if (rb2.isChecked()){
                     ddst="L"+ddst;
                 }
                if (rb3.isChecked()){
                     ddst="R"+ddst;
                 }
                if (rb4.isChecked()){
                     ddst="M"+ddst;
                 }
             }
             String pdst;

             pdst = edit_pdst.getText().toString();
             if (pdst=="") {
                pdst="PutDst";   
             }
             b.setText(ddst+"\n"+pdst);


         }


     });

1 个答案:

答案 0 :(得分:0)

您必须使用onCheckedChangeListener

ToggleButton toggle = (ToggleButton) d.findViewById(R.id.toggle_id);

toggleAlarm.setOnCheckedChangeListener(new OnCheckedChangeListener() {

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

    if(isChecked)
    {
        //your code
    }
    else
    {
        //your code
    }
}
});