android 开发 listview绑定radiobutton控件 如何实现listview列表中只有一个radiobutton被选中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 开发 listview绑定radiobutton控件 如何实现listview列表中只有一个radiobutton被选中?相关的知识,希望对你有一定的参考价值。

android 开发 listview绑定radiobutton控件 如何实现listview列表中只有一个radiobutton被选中?而且再加入radiobutton后,listview的单击事件setOnItemClickListenerlistview无法响应 怎么做才能响应?求大神!

listview绑定radiobutton控件,需要用自定义的Adapter

控制RadminButton只能选一个的方法:

    使用自定义Adapter

    在adapter.getView方法中给RadminButton注册点击事件

    在onClick事件中用个集合记录当前RadminButton的checked状态

    调用adapter.notifyDataSetChanged(); 刷新列表即可

    因为刷新列表的时候,会重新调用getView方法

参考技术A radiobutton控件外层布局加上android:descendantFocusability= "blocksDescendants"
radiobutton控件加上android:focusable = "false" 再重新设置监听事件就行了

你说的"如何实现listview列表中只有一个radiobutton被选中" 是什么意思 ? 
有几个radiobutton? 只有一个就设置选中一个就完了 还想怎样?追问

因为listview中没加入一行数据就要有一个radiobutton 但是每行的radiobutton可以同时被选中 等于他们就不是一组的 也不能用radiogroup分组

追答

listview item 在adapter 中设置选中就行了

追问

啊?怎么设置 能不能说细点 谢谢!

追答

你自己重写 adapter 然后在getView 方法中得到当前item中的radiobutton控件并设置成选中就行 这样每个item 都会有选中的 radiobutton了

追问

不是   我要的是只有一个radiobutton被选中  现在可以这样

而我想这样,只能同时只有一个被选中

追答

在getview方法里边加上判断就行了啊

参考技术B 1.setOnItemClickListenerlistview无法响应:
radiobutton的父控件加上android:descendantFocusability= "blocksDescendants"
radiobutton控件加上android:focusable = "false"
2.只有一个radiobutton被选中:
首先:设置一个int变量,记录上次选中的条目,例如,int lastSelectedIndex;初始为-1,表示无选中项。
然后:在setOnItemClickListenerlistview中,当被选中时,设置lastSelectedIndex为当前的index,并且调用adapter.notifyDataSetChanged()来刷新。
最后:在adapter中的getView()中,判断如果当前的index == lastSelectedIndex,则将radiobutton设置为选中状态,否则是未选中状态。追问

我觉得你已经说的很细了 但是我是新手 还是听得不太懂 比如怎么获取当前的index,而且 像getView和adapter.notifyDataSetChanged()从来都没用过.你有没有例子之类的给我看看 谢谢!

追答

setOnItemClickListenerlistview这个方法中会传给你一个int的值这个就是我说的index,你只需要写一下lastSelectedIndex = index;还有,在adapter中的getView()中也会有一个int值,这个就是我说的index
至于adapter.notifyDataSetChanged,是指当listView相对应的数据发生变化时,调用这个方法,listView才能刷新。
建议你先到网上搜索一下最简单的试用listVIew的方法,应该会很快的,然后你再来看我给你说的,就懂了。

追问

有个其他的问题 我先更改listview选中item的背景颜色
public void onItemClick(AdapterView arg0, View arg1, int arg2,
long arg3)

listViewJobList.getSelectedView()
.setBackgroundColor(Color.GRAY);


但是他报错说nullpointerexception
,这是为什么?

追答

getSelectedView(),如果被选中的view不在当前显示的屏幕中就是null

本回答被提问者和网友采纳

转Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法 【原文链接】

这篇文章完美的解决了我几个月没结论的bug...

感谢热爱分享的技术达人~

 

我是怎么走进这个大坑的.....

需求:

在listview中出一个EditText 接受用户输入消息。

前期解决方案:

给这个EditText绑定焦点事件.... 悲剧就开始了...

知道吗?当这个EditTextView被点了下,它的焦点就不断的获取,失去,获取,失去...  只点一下... 就频繁的重复..最后大部分是失去焦点。而且在EditTextView中每输入一个字符它都会先失去焦点,再获取焦点...呵呵。

关于获取焦点是因为自己保存了变量。当软盘弹起时会重绘,需要重新给焦点。

正确解决方案:

不应该监听焦点事件,监听touch事件,当点一下时,就记下获取焦点,重绘时再给焦点。

 

 

文章简陋,请谅解~

 

以上是关于android 开发 listview绑定radiobutton控件 如何实现listview列表中只有一个radiobutton被选中?的主要内容,如果未能解决你的问题,请参考以下文章

Android - ListView 中的 EditTexts 绑定到自定义 ArrayAdapter - 跟踪更改

转Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

Android:将数据库中的数据绑定到 ListView 中的 CheckBox?

在 Android 应用程序中使用 ListView 按字母顺序过滤 ListAdapter

使用android中的类将数据绑定到listview

Android--ListView与数据绑定(Xamarin)