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>
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>
相关文章推荐
- treegrid 新增,编辑状态时锁定要编辑行,以防保存时选中的行不是正在新增或编辑的行
- 关于UITableView中Cell的保持/保存 选中状态的简单方法
- 工作小结(十七)-GridView 翻页后保存CheckBox列的选中状态
- 翻页时保存Checkbox的选中状态
- easyui 分页保存checkbox的选中状态
- jquery ajax 下拉框三级无刷新联动,并保存保持选中值状态
- jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
- UITableView 保存选中状态的方式
- 点击一次选中,点击二次取消(或第二个选中),并退出时保存状态
- GridView中添加一个CheckBox列,翻页后保存选中状态
- 如何在griddata分页保存每页先前checkbox的选中状态?
- easyUI的datagrid 分页保存选中状态
- jq:翻页时,保存上页多选框checkbox选中状态
- jQuery 操作checkbox翻页保存选中状态
- jq:翻页时,保存上页多选框checkbox选中状态
- 保存Repeater控件中input CheckBox的选中状态
- Android—滑动ListView保存选中状态
- java和struts使用中的一点总结--关于写在页面上的select域的选项选中后保存状态的办法!
- Android 使用AlertDialog实现多选并保存选中状态
- 保存GridView checkbox 选中的状态(Session)