具有自定义视图Android的RadioButton [英] RadioButton with Custom View Android

查看:75
本文介绍了具有自定义视图Android的RadioButton的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试实现具有自定义视图的单选按钮,如下面的屏幕截图.

I'm trying to implement a radiobuttons with custom views like the below screenshot.

单选按钮的计数将是动态的.我试图创建一个Radiogroup,并通过编程方式使用addViewRadioButton添加到了RadioGroup中.但是setText不可能如所附屏幕截图所示.因此,我计划添加一个LinearLayout,当OnClickLinearLayout时,我将启用连接到LinearLayoutRadioButton并禁用其余部分.无论是正确的方法还是有其他实现方法.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆