android – 准备自定义的无线电组类型的布局
作者:互联网
我正在尝试在下图中准备自定义无线电组,如布局.我有将近8-10行.因此,我准备了一个具有水平方向的线性布局,并以编程方式添加了imageview,textview和radiobutton.
因此,如果我检查一个单选按钮,其他单选按钮应自动取消选中.在进行该任务之前,我遇到了另一个问题,即如果我的单选按钮被选中一次,那么虽然点击它们但单选按钮不可取消.以下是我的代码.
public class MainActivity extends Activity{
RadioButton[] radioBtns = new RadioButton[10];
String texts[] = {"text1", "text2", .... "text10"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
entireLayout = (LinearLayout)findViewById(R.id.main_layout);
for(int i =0; i<10; i++)
{
LinearLayout rowLayout=new LinearLayout(this);
radioBtns[i] = new RadioButton(this);
radioBtns[i].setId(i);
radioBtns[i].setOnCheckedChangeListener(cblistener);
ImageView imageView = new ImageView(this);
TextView tv = new TextView(this);
tv.setText(texts[i]);
rowLayout.addView(imageView);
rowLayout.addView(tv);
rowLayout.addView(radioBtns[i]);
entireLayout.addView(rowLayout);
View line = new View(this);
line.setBackgroundColor(getResources().getColor(R.color.horizontallinecolor));
entireLayout.addView(line, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, 1));
}
}
CompoundButton.OnCheckedChangeListener cblistener = new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton checkedbutton, boolean paramAnonymousBoolean)
{
switch (checkedbutton.getId())
{
case 0:
Log.d("tag", "checked 0th position");
break;
..........................
..........................
}
}
};
}
我通过记录日志来观察.控件在第一次进入onCheckedChanged()时会进行检查,但是在未选中时则不会.我想知道那些是如何不可检查的.
或者根据我的要求,我还有一个想法来准备这个布局,就像我为xml中的行准备一个更多的布局.然后膨胀视图10次.但是,如何只检查一个单选按钮,以便其他选定的单选按钮取消选中.有人可以建议我如何通过最好的方式实现这种放射组?
注意:我保留了上面的代码,因为它显示了我尝试过的内容.如果这是完全错误的方式,请放轻松,请建议我如何完成.
解决方法:
根据我的经验,使用这些定制的RadioGroups有点麻烦.我已经为你准备了一些代码,这些代码将是我解决你想要完成的事情的方法.希望这对你有用!
首先,您必须在onCreate()(或创建视图的任何位置)中调用此函数
private void addRadioButtons() {
LinearLayout llGroup = (LinearLayout) findViewById(R.id.linearLayoutGroup);
for(int i=0; i<10; i++){
MyRadioButton mrb = new MyRadioButton(this);
mrb.setText(String.valueOf(i));
llGroup.addView(mrb.getView());
}
}
这堂课应该是
private static class MyRadioButton implements View.OnClickListener{
private ImageView iv;
private TextView tv;
private RadioButton rb;
private View view;
public MyRadioButton(Context context) {
view = View.inflate(context, R.layout.my_radio_button, null);
rb = (RadioButton) view.findViewById(R.id.radioButton1);
tv = (TextView) view.findViewById(R.id.textView1);
iv = (ImageView) view.findViewById(R.id.imageView1);
view.setOnClickListener(this);
rb.setOnCheckedChangeListener(null);
}
public View getView() {
return view;
}
@Override
public void onClick(View v) {
boolean nextState = !rb.isChecked();
LinearLayout lGroup = (LinearLayout)view.getParent();
if(lGroup != null){
int child = lGroup.getChildCount();
for(int i=0; i<child; i++){
//uncheck all
((RadioButton)lGroup.getChildAt(i).findViewById(R.id.radioButton1)).setChecked(false);
}
}
rb.setChecked(nextState);
}
public void setImage(Bitmap b){
iv.setImageBitmap(b);
}
public void setText(String text){
tv.setText(text);
}
public void setChecked(boolean isChecked){
rb.setChecked(isChecked);
}
}
并且xml要膨胀,例如:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<RadioButton
android:id="@+id/radioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
标签:android,radio-button,radio-group 来源: https://codeday.me/bug/20191005/1854648.html