具有自定义视图Android的RadioButton [英] RadioButton with Custom View Android
问题描述
我正在尝试实现具有自定义视图的单选按钮,如下面的屏幕截图.
I'm trying to implement a radiobuttons with custom views like the below screenshot.
单选按钮的计数将是动态的.我试图创建一个Radiogroup
,并通过编程方式使用addView
将RadioButton
添加到了RadioGroup
中.但是setText
不可能如所附屏幕截图所示.因此,我计划添加一个LinearLayout
,当OnClick
该LinearLayout
时,我将启用连接到LinearLayout
的RadioButton
并禁用其余部分.无论是正确的方法还是有其他实现方法.
The count of the radio button will be dynamic. I tried to create a Radiogroup
and added the RadioButton
to the RadioGroup
using addView
programatically. But it is not possible to setText
as like in the attached screenshot. So I plan to add a LinearLayout
and when OnClick
the LinearLayout
I will enable the RadioButton
attached to the LinearLayout
and disable rest of them. Whether it is the correct way to do that or is there any other way to implement that.
我也搜索了很多.但是我找不到类似的东西.所以,请任何人建议我正确的方法.
I also searched a lot. But I can't able to find anything similar to this. So, Please anyone suggest me the correct way.
推荐答案
您可以使用自定义Listview"来实现.
You can do it with Custom Listview.
activity_list_view.xml
activity_list_view.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"/>
</RelativeLayout>
自定义列表项:radio_button_item.xml
Custom list item: radio_button_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/radioButtonLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal"
android:descendantFocusability="blocksDescendants"
android:layout_margin="10dp">
<RadioButton
android:id="@+id/radioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="" />
<LinearLayout
android:layout_width="0dp"
android:layout_weight="0.9"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp">
<TextView
android:id="@+id/textCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Code XYZ" />
<TextView
android:id="@+id/textCond"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="Rs.100 off if you purchase more than.." />
</LinearLayout>
<TextView
android:id="@+id/textValid"
android:layout_weight="0.2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right"
android:text="Valid until dd/mm/yyyy" />
</LinearLayout>
现在使用自定义适配器从活动"中添加内容:
Now use a custom adapter to add content from Activity:
public class RadioButtonActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
// RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
final List<ItemContents> saveItems = new ArrayList<>();
String code = null, condition = null, valid = null;
// save your values here to the ItemContent List. usign dummy values as of now
for (int i = 1; i < 6; i++) {
code = "CodeXYZ000" + i;
condition = "Purchase More than Rs." + i + "00";
valid = "Valid until Dec 30";
saveItems.add(itemContents(i, code, condition, valid));
}
final CustomAdapter adapter = new CustomAdapter(this, R.layout.activity_list_view, saveItems);
ListView listView = (ListView) findViewById(R.id.radioGroup);
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
adapter.setSelectedIndex(position); // set selected position and notify the adapter
adapter.notifyDataSetChanged();
}
});
}
private static ItemContents itemContents(int i, final String code, final String condition, final String valid) {
ItemContents itemContent = new ItemContents();
itemContent.setId(i);
itemContent.setmCode(code);
itemContent.setmCondition(condition);
itemContent.setmValid(valid);
return itemContent;
}
}
以及自定义适配器:
public class CustomAdapter extends ArrayAdapter<ItemContents> {
int selectedIndex = -1;
public CustomAdapter(Context context, int activity_radio_button, List<ItemContents> saveItems) {
super(context, activity_radio_button, saveItems);
}
public void setSelectedIndex(int index) {
selectedIndex = index;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.radio_button_item, null);
}
RadioButton rbSelect = (RadioButton) v
.findViewById(R.id.radioButton);
if(selectedIndex == position){ // check the position to update correct radio button.
rbSelect.setChecked(true);
}
else{
rbSelect.setChecked(false);
}
ItemContents itemContents = getItem(position);
if (itemContents != null) {
TextView textCode = (TextView) v.findViewById(R.id.textCode);
TextView textCond = (TextView) v.findViewById(R.id.textCond);
TextView textValid = (TextView) v.findViewById(R.id.textValid);
textCode.setText(itemContents.getmCode());
textCond.setText(itemContents.getmCondition());
textValid.setText(itemContents.getmValid());
}
return v;
}
}
还有您的输出(我在电视上工作过,所以在大屏幕上显示)
And your output(I worked this on tv so the big screen)
[
这篇关于具有自定义视图Android的RadioButton的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!