片段中动态生成的RadioGroup中的“获取检查”按钮

时间:2018-07-14 16:40:09

标签: android android-viewpager radio-button fragment radio-group

我们有一个项目,在片段中有多个以编程方式生成的RadioGroup。 片段类是这样的:

public class ViewPagerFragment extends Fragment {
private LinearLayout parentLayout;
private View rview;
private Button next;
private RadioGroup radioGroup;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    rview = inflater.inflate(R.layout.fragment_view_pager, container, false);
    generateViews(rview);
    return rview;
}

private void generateViews(View mView) {
    parentLayout = mView.findViewById(R.id.parent_layout);
    next = getActivity().findViewById(R.id.next);

    radioGroup = addRadioButton(3);

    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.e("TAG", "Radio button id: " + radioGroup.getCheckedRadioButtonId());
        }
    });
}

public RadioGroup addRadioButton(int count) {
    RadioGroup radioGroup = new RadioGroup(this.getContext());
    radioGroup.setId(View.generateViewId());
    radioGroup.setOrientation(LinearLayout.VERTICAL);

    parentLayout.addView(radioGroup);

    for (int i = 1; i <= count; i++) {
        RadioButton radioButton = new RadioButton(this.getContext());
        radioButton.setId(View.generateViewId());
        radioButton.setText("Radio " + i);
        Log.e("TAG", "Cretaed radio button id: " + radioButton.getId());
        radioGroup.addView(radioButton);
    }

    return radioGroup;
}
}

在运行项目radioGroup.getCheckedRadioButtonId()时始终显示-1。

代码非常简单。 我尝试过的是:

  • 在生成radioButtons的同时,我还要检查它是否具有ID,并且是否具有ID。因此View.generateViewId()方法可以正常工作。

  • 在初始化动态RadioGroup和RadioButton以使用活动上下文时更改参数,但这不会影响结果

  • 遍历RadioGroup的子级,并检查每个RadioButton是否.isChecked()为true,这表明未选中RadioButton。

  • 一些类似问题的答案说rView应该是全局的,我们也尝试过这样做。

logcat:

E/TAG: Cretaed radio button id: 10
E/TAG: Cretaed radio button id: 11
E/TAG: Cretaed radio button id: 12
E/TAG: Cretaed radio button id: 14
E/TAG: Cretaed radio button id: 15
E/TAG: Cretaed radio button id: 16
E/TAG: Radio button id: -1
如该logcat日志中所示,

创建RadioButtons时的日志显示了ID。并且当单击下一个按钮时,getCheckedRadioButtonId返回-1。

有人知道我在做什么错吗?

0 个答案:

没有答案