我们有一个项目,在片段中有多个以编程方式生成的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。
有人知道我在做什么错吗?