我有两个问题:
我想要实现的是每行中都带有切换按钮的列表视图,并且它工作正常,但我想设置启动第4和第5开启True
holder.s.setChecked(possition == 4);
holder.s.setChecked(possition == 5);
设置为真仅为5,如何做到这一点,给我任何提示?
第二个问题:在滚动我的listview更改切换按钮的状态时,我尝试了很多教程,但没有运气,如何保持切换按钮的状态?
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
String pytanie = getItem(position);
if (convertView==null){
convertView = inflater.inflate(R.layout.cardio_row, null);
holder = new ViewHolder();
holder.question = (TextView) convertView.findViewById(R.id.question);
holder.s = (Switch)convertView.findViewById(R.id.switch1);
convertView.setTag(holder);
}
else{
holder = (ViewHolder) convertView.getTag();
}
//Model_cardio question = getItem(position);
holder.question.setText(pytanie);
holder.s.setChecked(position == 4);
holder.s.setChecked(position == 5);
holder.s.setTag(position);
return convertView;
}
编辑: 我已添加此内容,并希望将状态存储在某个列表中
holder.s.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
}
});
答案 0 :(得分:2)
在您的代码中,这两个语句
holder.s.setChecked(position == 4);
holder.s.setChecked(position == 5);
一个接一个地执行。对于每个位置。
因此,对于位置编号4,第一个语句会导致Switch
被检查,只能在以下语句中再次取消选中。
您可以引入boolean
变量:
boolean doCheck = (position == 4) || (position == 5);
holder.s.setChecked(doCheck);
问题的棘手部分是如何跟踪已检查的列表行。
为此,您需要一种类似List
的
ArrayList<Integer> checkedRows;
在适配器的构造函数中,您可以根据需要初始化列表。
checkedList = new ArrayList();
// if you like, you can add rows 4 and 5 as checked now
// and drop the respective code in 'getView()':
checkedList.add(4);
checkedList.add(5);
然后在getView()
方法中,检查每个View
:
holder.s.setTag(position);
holder.s.setOnCheckedChangeListener(null);
if (checkedList.contains(position) )
{
holder.s.setChecked(true);
}
else
{
holder.s.setChecked(false);
}
holder.s.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if (isChecked )
{
checkedList.add((Integer)buttonView.getTag() );
}
else
{
checkedList.remove((Integer)buttonView.getTag() );
}
}
};