2016-09-05 6 views
0

Ich versuche, ein benutzerdefiniertes Dialogfeld zu machen, das Radiobuttons zur Auswahl von n bietet und Text des Radiobuttons im Textfeld anzeigt. Dies ist, was ich versucht ..Ich bin nicht in der Lage, die ID des Radiobuttons über getCheckedRadioButtonId() zu erhalten

Mein Plan für Dialogfeld ist

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

<RadioGroup 
    android:id="@+id/rg_carType" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dp" 
    android:orientation="vertical"> 

    <RadioButton 
     android:id="@+id/rb_hatchD" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hatchback(Diesel)" /> 

    <RadioButton 
     android:id="@+id/rb_hatchP" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hatchback(Petrol)" /> 

    <RadioButton 
     android:id="@+id/rb_sedanD" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Sedan(Diesel)" /> 

    <RadioButton 
     android:id="@+id/rb_sedanP" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Sedan(Petrol)" /> 

    <RadioButton 
     android:id="@+id/rb_suv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="SUV" /> 
</RadioGroup> 

<ImageView 
    android:id="@+id/iv_carType" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="20dp" 
    android:layout_toRightOf="@+id/rg_carType" 
    /> 

<Button 
    android:id="@+id/btn_confirmCar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/rg_carType" 
    android:layout_centerHorizontal="true" 
    android:background="@drawable/button_2" 
    android:text="Confirm" 
    android:textColor="#fff" /> 

Und die Funktion für Feld Custom Dialog ist

private void diplayCartype() { 
final Dialog dialog_car = new Dialog(FinalActivity.this); 
final RadioButton rb_select; 
RadioGroup rg_carType; 
ImageView iv_carType; 
Button btn_confirmCar; 
String sCar="?"; 
dialog_car.setTitle("Select Car Type"); 

dialog_car.setContentView(R.layout.dialog_cartype); 

iv_carType=(ImageView)dialog_car.findViewById(R.id.iv_carType); 
btn_confirmCar=(Button)dialog_car.findViewById(R.id.btn_confirmCar); 
rg_carType=(RadioGroup)dialog_car.findViewById(R.id.rg_carType); 

int selected=rg_carType.getCheckedRadioButtonId(); 
rb_select=(RadioButton)dialog_car.findViewById(selected); 

switch(selected) 
{ 
    case R.id.rb_hatchD: 
     iv_carType.setImageResource(R.drawable.hatch_d); 
     sCar=rb_select.getText().toString(); 
     break; 
    case R.id.rb_hatchP: 
     iv_carType.setImageResource(R.drawable.hatch_p); 
     sCar=rb_select.getText().toString(); 
     break; 
    case R.id.rb_sedanD: 
     iv_carType.setImageResource(R.drawable.sedan_d); 
     sCar=rb_select.getText().toString(); 
     break; 
    case R.id.rb_sedanP: 
     iv_carType.setImageResource(R.drawable.sedan_p); 
     sCar=rb_select.getText().toString(); 
     break; 
    case R.id.rb_suv: 
     iv_carType.setImageResource(R.drawable.suv); 
     sCar=rb_select.getText().toString(); 
     break; 
    default: 
     iv_carType.setImageResource(R.drawable.suv); 
     sCar="default"; 
} 
final String finalSCar = sCar; 
btn_confirmCar.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     tv_carType.setText(finalSCar); 
     dialog_car.dismiss(); 
    } 
}); 
dialog_car.show(); 
} 

Das Problem, dass der Schalter Fall ist Führt nur eine Standardbedingung aus, das heißt, es wird keine ID zum Überprüfen erhalten. Vielen Dank im Voraus .. :)

+0

wo/wann wird 'diplayCartype' aufgerufen? – pskink

+0

displayCartype wird beim Klick auf ein lineares Layout aufgerufen, das das Textfeld enthält, in dem der Text angezeigt werden soll – Adarsh

+0

Warum benutzen Sie 'RadioGroup # setOnCheckedChangeListener' nicht? – pskink

Antwort

0

über getCheckedRadioButtonId()

Gibt die Kennung des ausgewählten Optionsfelds in dieser Gruppe. Bei einer leeren Auswahl ist der zurückgegebene Wert -1.

Es gibt kein ausgewähltes RadioButton in dem Moment, wenn Sie versuchen, nach ausgewählten zu suchen.

dialog_car.setContentView(R.layout.dialog_cartype); 

// at this point you have newly created view hierarchy and 
// RadioGroup has no selected items 

iv_carType=(ImageView)dialog_car.findViewById(R.id.iv_carType); 
btn_confirmCar=(Button)dialog_car.findViewById(R.id.btn_confirmCar); 
rg_carType=(RadioGroup)dialog_car.findViewById(R.id.rg_carType); 

// still has no selected items, next call returns -1 as well 
int selected=rg_carType.getCheckedRadioButtonId(); 

Sie sollen getCheckedRadioButtonId() von Handler von einigen zusätzlichen Tasten (zum Beispiel „OK“) verwenden, um sicher zu sein, dass Benutzer Ihrer Radio-Buttons gesehen hat und hat genug Zeit, etwas zu wählen.

+0

Ich bin in der Lage, das Dialogfeld zu sehen, wenn ausgeführt ... und ich wähle den RadioButton..Aber noch der Schalter Fall geht auf Standard – Adarsh

+0

@ Let'sLearnit Sie versuchen, die Auswahl aus einer gerade erstellten Ansicht, die nicht ausgewählt hat Artikel noch nicht. Siehe meine Bearbeitung. – Sergio

+0

Ja ich bekomme ur Punkt ... wenn es keine ausgewählten Artikel gibt .. kann ich einen voreingestellten Gegenstand setzen ... aber das wird nur den Standardgegenstand auswählen ... wie kann ich den Gegenstand von hier auswählen ... – Adarsh

0

dieser Code Arbeit für mich

public class RadioButtonFragment extends DialogFragment { 
    String singleitem; 
    private int witch; 
    private MySharedPreferences mySharedPreferences = new MySharedPreferences(); 
    private String[] item = {"Naskh asiatype", "Fajer noori Nastaleeq", "Pak nastaleeq (default)"}; 

    @Override 
    public void onResume() { 
     super.onResume(); 
     witch= mySharedPreferences.loadIntPrefs(Constants.RADIO_BUTTON_INDEX_KEY,2,getActivity()); 

    } 


    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     witch= mySharedPreferences.loadIntPrefs(Constants.RADIO_BUTTON_INDEX_KEY,2,getActivity()); 
     builder.setTitle("please selet any fount").setSingleChoiceItems(item, witch, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       singleitem= item[which]; 
       mySharedPreferences.saveStringPrefs(Constants.FONT_KEY,singleitem,getActivity()); 
       mySharedPreferences.saveintPrefs(Constants.RADIO_BUTTON_INDEX_KEY,which,getActivity()); 
       Toast.makeText(getContext(),"Font is selected"+which,Toast.LENGTH_SHORT).show(); 

      } 
     }); 

     return builder.create(); 
    } 
} 

und nennen dieses Fragment zu bauen

RadioButtonFragment radioButtonFragment = new RadioButtonFragment(); 
     radioButtonFragment.show(getSupportFragmentManager(), RadioButtonFragment_TAG); 
0

Sie müssen den Wert zum richtigen Zeitpunkt (Tastenklick) lesen. Tun Sie dies:

btn_confirmCar.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     rg_carType=(RadioGroup)dialog_car.findViewById(R.id.rg_carType); 

     int selected=rg_carType.getCheckedRadioButtonId(); 
     rb_select=(RadioButton)dialog_car.findViewById(selected); 

     switch(selected) 
     { 
      case R.id.rb_hatchD: 
       iv_carType.setImageResource(R.drawable.hatch_d); 
       break; 
      case R.id.rb_hatchP: 
       iv_carType.setImageResource(R.drawable.hatch_p); 
       break; 
      case R.id.rb_sedanD: 
       iv_carType.setImageResource(R.drawable.sedan_d); 
       break; 
      case R.id.rb_sedanP: 
       iv_carType.setImageResource(R.drawable.sedan_p); 
       break; 
      case R.id.rb_suv: 
       iv_carType.setImageResource(R.drawable.suv); 
       break; 
      default: 
       iv_carType.setImageResource(R.drawable.suv); 
       sCar="default"; 
     } 

     if (!sCar.equals("default")) 
      sCar = rb_select.getText().toString(); 

     tv_carType.setText(sCar); 
     dialog_car.dismiss(); 
    } 
}); 

dialog_car.show(); 
} 
0

Sie müssen eine Schnittstelle (Listener) zum Hören von Benutzereingaben. Zum Beispiel können Sie RadioGroup.setOnCheckedChangeListener verwenden und dann Ihren Schalter Anweisung darin setzen.

Ihr aktueller Code würde statisch die Standardwerte der ursprünglich zugewiesenen Zustände auswählen. Die obigen Erweiterungen würden Ihnen helfen, Benutzereingaben dynamisch zu handhaben.

Verwandte Themen