Samstag, 29. Juni 2013

ToogleButtons im AlertDialog

Für mein Golfapp Projekt (siehe meine Golfseite ) musste ein AlertDialog her. Es hat ganz schön lang gedauert, eh ich das so hinbekommen habe, wie ich es mir vorstellte:

Nach dem Klick auf einen Button im 'Main' Layout soll sich ein Dialog öffnen, in dem Texteingaben möglich sind und auch angeklickt werden kann, wo der Drive gelandet ist. Dis habe ich mit Togglebuttons realisieren wollen.


Problematisch war, dass immer nur ein Button 'An' sein sollte. Die Lösung hat mich ganz schön Zeit gekostet:). Schließlich fand ich heraus, dass ich für jeden der Buttons ein OnCheckedChangeListener brauche.

Hier der Code des Alertdialogaufrufes zur Eingabe der Abschlagslänge -Richtung und der Einlochdistanz:

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);
     
        //Klickhandling OnCheckedChangeListener fuer jeden Button
      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);
   
    // do something
    // lbl_platz = (TextView) findViewById(R.id.lbl_courseName);
    // lbl_platz.setText(value);
    }
   
   
    });
   
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
    public void onClick(DialogInterface dialog, int whichButton){
    // do nothing
   
    }
    });
   
   
    builder.show();
    }