Android 使用GridView来实现类似RadioButton的多行单选功能
来源:互联网 发布:android程序员工资 编辑:程序博客网 时间:2024/06/06 00:03
RadioButton是大家都熟悉的单选按钮,用起来也简单好用。但是RadioButton只能在显示单一的一行时(RadioButton横向或者纵向排列)才能实现单选功能。假如你要实现多行的RadioButton,又要类似RadioButton的单选功能,这时候RadioButton就不好用了。下面来介绍一种方法实现这种多行单选的功能:
1. 先看截图
2. 直接上代码
(1)MyGridViewAdapter.java: GiidView(或者ListView)在自定义Adapter的时候可以使用setSeclection()这个方法来获取当前选择的item的位置,如下:
public class MyGridViewAdapter extends BaseAdapter{ private Context mContext; private int lastPosition;//定义一个标记为最后选择的位置 private String[] str = null; public void setData(String[] str, int lastPos) { this.str = str; this.lastPosition = lastPos; } public void setSeclection(int position) { lastPosition = position; } public MyGridViewAdapter(Context mContext) { super(); this.mContext = mContext; } @Override public int getCount() { return str.length; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View mView, ViewGroup arg2) { MyGridViewAdapter.ViewHolder holder = null; if (mView == null) { holder = new MyGridViewAdapter.ViewHolder(); mView = LayoutInflater.from(mContext).inflate(R.layout.layout_item_gridview, null); holder.text = (TextView) mView.findViewById(R.id.idGridviewTextview); holder.check = (ImageView) mView.findViewById(R.id.idGridviewCheck); mView.setTag(holder); } else { holder = (MyGridViewAdapter.ViewHolder) mView.getTag(); } holder.text.setText(str[position] + ""); if (lastPosition == position) {//最后选择的位置 holder.check.setBackgroundResource(R.drawable.button_checked); } else { holder.check.setBackgroundResource(R.drawable.button_unchecked); } return mView; } class ViewHolder { private TextView text; private ImageView check; }}
(2)MyGridView.java: 两个GiidView(或者ListView)在一个ScrollView中,滑动时会出现冲突,为了不冲突就需要计算GiidView(或者ListView)的高度,从而需要自定义一个MyGridView,如下:
public class MyGridView extends GridView { public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }}
(3)CustomRadioButtonActivity.java: 主Activity,实现界面。
public class CustomRadioButtonActivity extends Activity { private String[] goods = new String[]{"HUAWEI P10","XIAOMI 6","MEIZU Pro7", "MOTO X","Vivo X9", "Oppo R9","Sony X","Samung S8","iPhone 8"}; private String[] price = new String[]{"9999", "8999", "7999", "6999", "5999", "4999", "3999", "2999", "1999"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_custom_radio_button); initGoods(); initPrice(); } private void initGoods(){ MyGridView goodsGridView = (MyGridView)findViewById(R.id.single_choice_view_goods); final MyGridViewAdapter mAdapter = new MyGridViewAdapter(this); mAdapter.setData(goods, 2);//传数组, 并指定默认值 goodsGridView.setAdapter(mAdapter); goodsGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { mAdapter.setSeclection(position);//传值更新 mAdapter.notifyDataSetChanged(); Log.i("jkl","position==="+position); } }); } private void initPrice(){ MyGridView priceGridView = (MyGridView)findViewById(R.id.single_choice_view_price); final MyGridViewAdapter mAdapter = new MyGridViewAdapter(this); mAdapter.setData(price, 0); priceGridView.setAdapter(mAdapter); priceGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { mAdapter.setSeclection(position);//传值更新 mAdapter.notifyDataSetChanged(); Log.i("jkl","position==="+position); } }); }}(4)主布局activity_custom_radio_button.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_project_switch_menu_new" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:padding="6dp" android:text="@string/switch_menu" android:textSize="18sp" /> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/gray" android:text="@string/switch_Goods" /> <com.android.customradiobutton.MyGridView android:id="@+id/single_choice_view_goods" android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" android:numColumns="3" android:padding="8dp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/gray" android:text="@string/switch_Price" /> <com.android.customradiobutton.MyGridView android:id="@+id/single_choice_view_price" android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="4" android:padding="8dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/gray" android:gravity="center_horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/switch_Submit" /> </LinearLayout> </LinearLayout> </ScrollView></LinearLayout>(4)item布局layout_item_gridview.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="match_parent" android:orientation="horizontal" android:gravity="center_vertical" android:padding="6dp"> <ImageView android:id="@+id/idGridviewCheck" android:layout_width="20dp" android:layout_height="20dp" /> <TextView android:textColor="@android:color/black" android:paddingLeft="5dp" android:id="@+id/idGridviewTextview" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>(5)button图片:
button_checked.png
button_unchecked.png
1 0
- Android 使用GridView来实现类似RadioButton的多行单选功能
- Android 使用GridView来实现类似RadioButton的多行单选功能
- 使用Repeater实现类似GridView编辑功能
- 使用webpack的动态模块功能实现类似包扫描来简化配置
- Android小知识——RadioButton设计成类似Tabhost的功能(不能滑动的)
- android TabHost的一种用RadioButton来实现的切换
- GridView 实现类似图片'发布'功能
- Android-ListView实现类似Gallery的功能
- Android-ListView实现类似Gallery的功能
- Android实现类似数据清理的功能
- Android LRecyclerView实现类似viewpager的功能
- 用actionbar tab来实现类似Tabhost的功能
- jquery处理关于Gridview中的RadioButton不能实现单选的功能的解决方案
- 在GridView中的每行加入RadioButton,实现单选一行的功能
- 使用RadioButton自定义样式实现喜马拉雅底部的切换功能
- gridview中实现radiobutton的单选
- Android实现类似网购电影票的简易GridView选择器
- jsp中类似gridview的功能
- xcode8 打包 ipa 四种方法
- Tomcat免安装版的环境变量配置
- Spring与jbpm的整合
- 谈谈类之间的关联关系与依赖关系
- 用JNI实现与原生代码通信
- Android 使用GridView来实现类似RadioButton的多行单选功能
- jdk1.8日期util类
- 添加视频播放功能、鼠标点击人物移动
- Shiro 的学习总结
- Android深入浅出之 Audio——第一部分 AudioTrack分析
- logstash filter 学习
- 消息队列的两种模式及实现
- python json.dumps 中文编码问题
- 三、Linux系统管理