您的位置:首页 > 编程语言

listview中radiobutton选中状态保存

2017-02-17 14:06 134 查看
今天就谈一谈 怎么解决listview滑动时 radiobutton状态保留的问题。其实我觉得就是一句话,position 串了~~。看看我的解决办法吧!

1.首先定一个 map,用来封 装当前选中的radiobutton
2.给装着radiobutton的爹-radiogroup弄个 tag值
3.判断当前的position==tag与否。
以上三点就是我解决问题的思路。
源代码:

public class MainActivity extends AppCompatActivity {
private ListView listView;
private Map<Integer,Integer> hs=new HashMap<>();// key封装的是它爹的tag值,value封装儿子radiobutton
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView)findViewById(R.id.listview);
listView.setAdapter(new Adapter1());
}
class ViewHolder{

TextView textView;
RadioGroup radio;
RadioButton rd1,rd2,rd3,rd4;
}
class Adapter1 extends BaseAdapter {

@Override
public int getCount() {
return 100;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

final ViewHolder viewHolder;
if(convertView == null){
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item, null);
viewHolder.textView = (TextView)convertView.findViewById(R.id.tv_count);
viewHolder.radio = (RadioGroup)convertView.findViewById(R.id.radio);
viewHolder.rd1 = (RadioButton)convertView.findViewById(R.id.rd1);
viewHolder.rd2 = (RadioButton)convertView.findViewById(R.id.rd2);
viewHolder.rd3 = (RadioButton)convertView.findViewById(R.id.rd3);
viewHolder.rd4 = (RadioButton)convertView.findViewById(R.id.rd4);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.textView.setText(position+".");
viewHolder.radio.setTag(position);//给RadioGroup 弄个tag标记
if(hs.containsKey(position))
{
viewHolder.radio.check(hs.get(position));
}
else
{ viewHolder.radio.clearCheck();
}

viewHolder.radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {

if((Integer)radioGroup.getTag()==position) {//最关键的一步 判断当前对象是否相等
boolean b=false;
if (i == R.id.rd1) {
b=true;
hs.put((Integer) radioGroup.getTag(), R.id.rd1);

} else if (i == R.id.rd2) {
hs.put((Integer) radioGroup.getTag(), R.id.rd2);
b=true;

} else if (i == R.id.rd3) {
b=true;
hs.put((Integer) radioGroup.getTag(), R.id.rd3);

} else if (i == R.id.rd4) {
b=true;
hs.put((Integer) radioGroup.getTag(), R.id.rd4);

}
if(b)
listView.smoothScrollToPositionFromTop(position,0,500);
}
}

});

return convertView;
}
}

XML:activity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.wan.MainActivity">

<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listview"></ListView>
</LinearLayout>

XML:item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_count"/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radio">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A"
android:id="@+id/rd1"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B"
android:id="@+id/rd2"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C"
android:id="@+id/rd3"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="D"
android:id="@+id/rd4"/>
</RadioGroup>
</LinearLayout>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  源代码 private public