2013-06-28 3 views
1

В моем приложении для Android я сделал настраиваемый диалог оповещений. Он открывается при нажатии кнопки. В этом диалоговом окне есть 4 переключателя, которые должны реагировать как радиолюбители. Я не хочу использовать радиобуты по соображениям дизайна.Howto: реализовать OnClickListener для ToggleButtons в AlertDialog?

Я не могу сделать это, чтобы реализовать прослушиватель onClick для этих кнопок toggle. Я получаю их в некотором смысле, что только одна кнопка может быть «Вкл.», А остальная часть должна быть выключена. (Как группа 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, но это, похоже, недоступно в AlertDialogBuilder. Вот код, который будет запущен после нажатия кнопки, чтобы отобразить 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

Почему бы не использовать радиокнопки? Где ваш код onClickListener? – verybadalloc

+0

Я не хочу, чтобы радиобуты по соображениям дизайна ... код сейчас выше ... – Marco

ответ

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 
    } 
} 
}); 
+0

thx, я попробую это ... :) – Marco

+0

это работало для вас ?? – Eriz

+0

, похоже, нет onCheckedChangeListener для alertdialog.builder – Marco