无法通过getCheckedRadioButtonId()获取radiobutton的id

时间:2016-09-05 18:26:07

标签: java android

我正在尝试创建一个自定义对话框,它提供了单选按钮,可以从n中选择文本字段中的单选按钮文本。这是我试过的..

我的布局对话框是

<?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" />

自定义对话框的功能是

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();
}

问题是switch case只执行默认条件,这意味着它没有获取要检查的id。在此先感谢.. :))

4 个答案:

答案 0 :(得分:0)

关于lengths

  

返回此组中所选单选按钮的标识符。   选择空时,返回的值为-1。

当您尝试检查所选的一个时,没有选择reptileInstance

getCheckedRadioButtonId()

您应该使用某些额外按钮的处理程序中的RadioButton(例如“确定”)以确保用户已经看到您的单选按钮并且有足够的时间来选择某些内容。

答案 1 :(得分:0)

此代码适用于我

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();
    }
}

并调用构建此片段

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

答案 2 :(得分:0)

您需要在正确的时间读取值(按钮单击)。这样做:

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();
} 

答案 3 :(得分:0)

您必须使用界面(听众)来收听用户输入。例如,您可以使用 RadioGroup.setOnCheckedChangeListener ,然后将开关语句放入其中。

    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        public void onCheckedChanged(RadioGroup group, int checkedId) {
             switch(checkedId){
                  case R.id.radioButtonId: 
                       // Your Code Here
                       break;                     
                  ---
             }
        }
    });

您当前的代码将静态选择最初分配的状态的默认值。上述增强功能可帮助您动态处理用户输入。