Android 我的列表视图中选中的切换按钮不是';当我滚动时,我不再检查
I动态地将切换按钮从数组添加到我的放射组。添加工作正常,每个不同的列表项工作正常,但当我滚动时,已检查状态会更改回原来的状态。 我怎样才能解决这个问题 这是我的ListAdapter课程:Android 我的列表视图中选中的切换按钮不是';当我滚动时,我不再检查,android,dynamic,listadapter,togglebutton,radio-group,Android,Dynamic,Listadapter,Togglebutton,Radio Group,I动态地将切换按钮从数组添加到我的放射组。添加工作正常,每个不同的列表项工作正常,但当我滚动时,已检查状态会更改回原来的状态。 我怎样才能解决这个问题 这是我的ListAdapter课程: public class BezoekverslagDetailsListAdapter extends ArrayAdapter<Vraag>{ public Context context; public List<Vraag> vragen; ViewHolder holder;
public class BezoekverslagDetailsListAdapter extends ArrayAdapter<Vraag>{
public Context context;
public List<Vraag> vragen;
ViewHolder holder;;
public BezoekverslagDetailsListAdapter(Activity context, List<Vraag> vragen){
super(context, R.layout.vraag_item, vragen);
this.context = context;
this.vragen = vragen;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = null;
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.vraag_item, null, false);
holder = new ViewHolder();
holder.vraag = (TextView)convertView.findViewById(R.id.tv_vraag);
holder.group = (RadioGroup)convertView.findViewById(R.id.toggleGroup);
holder.position = position;
holder.toggle = new ToggleButton(context);
convertView.setTag(holder);
}
else{
holder = (ViewHolder) convertView.getTag();
}
final Vraag vraag = vragen.get(position);
holder.vraag.setText(vraag.getVraag());
holder.group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
public void onCheckedChanged(RadioGroup group, int checkedId){
for (int j = 0; j < group.getChildCount(); j++) {
final ToggleButton view = (ToggleButton) group.getChildAt(j);
view.setChecked(view.getId() == checkedId);
vraag.getAntwoorden().get(view.getId()).setSelected(view.getId() == checkedId);
}
}
});
for(final Antwoord a : vraag.getAntwoorden()){
holder.toggle = new ToggleButton(context);
holder.toggle.setText(a.getAntwoord());
holder.toggle.setTextOn(a.getAntwoord());
holder.toggle.setTextOff(a.getAntwoord());
holder.toggle.setId(a.getId());
holder.toggle.setChecked(a.getSelected());
if(a.getVisible() == false){
holder.toggle.setVisibility(ToggleButton.INVISIBLE);
}
holder.toggle.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View view)
{
// your click actions go here
((RadioGroup)view.getParent()).check(view.getId());
}
});
holder.group.addView(holder.toggle);
}
return convertView;
}
static class ViewHolder {
TextView vraag;
RadioGroup group;
ToggleButton toggle;
int position;
}
公共类BezoekverslagDetailsListAdapter扩展了ArrayAdapter{
公共语境;
公开名单;
持票人;;
公共BezoekverslagDetailsListAdapter(活动上下文,列表vragen){
超级(上下文,R.layout.vraag_项,vragen);
this.context=上下文;
this.vragen=vragen;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父级){
convertView=null;
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(R.layout.vraag_项,空,假);
holder=新的ViewHolder();
holder.vraag=(TextView)convertView.findViewById(R.id.tv_vraag);
holder.group=(RadioGroup)convertView.findViewById(R.id.toggleGroup);
holder.position=位置;
holder.toggle=新的ToggleButton(上下文);
convertView.setTag(支架);
}
否则{
holder=(ViewHolder)convertView.getTag();
}
最终Vraag Vraag=vragen.get(位置);
holder.vraag.setText(vraag.getVraag());
holder.group.setOnCheckedChangeListener(新的RadioGroup.OnCheckedChangeListener(){
检查更改后的公共无效(RadioGroup组,int checkedId){
对于(int j=0;j
}而不是这个:
final Vraag vraag = vragen.get(position);
holder.vraag.setText(vraag.getVraag());
试试这个:
final Vraag vraag = vragen.get(holder.position);
holder.vraag.setText(vraag.getVraag());
在滚动列表视图时,它有一种奇怪的行为,即根据视图中当前存在的项目计算位置。我曾经面对过这种奇怪的观点。我动态地将该特定视图的标记设置为视图的实际位置,然后执行了一个
视图。get(tag)
我找到了另一种方法,现在它保留选中的切换按钮,但现在的问题是按钮的位置发生了变化。
代码如下:
public class BezoekverslagDetailsListAdapter extends ArrayAdapter<Vraag>{
public Context context;
public List<Vraag> vragen;
ViewHolder holder;
public BezoekverslagDetailsListAdapter(Activity context, List<Vraag> vragen){
super(context, R.layout.vraag_item, vragen);
this.context = context;
this.vragen = vragen;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
//convertView = null;
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.vraag_item, null, false);
holder = new ViewHolder();
holder.vraag = (TextView)view.findViewById(R.id.tv_vraag);
holder.group = (RadioGroup)view.findViewById(R.id.toggleGroup);
holder.position = position;
holder.toggle = new ToggleButton(context);
for(final Antwoord a : vragen.get(holder.position).getAntwoorden()){
holder.toggle = new ToggleButton(context);
holder.toggle.setText(a.getAntwoord());
holder.toggle.setTextOn(a.getAntwoord());
holder.toggle.setTextOff(a.getAntwoord());
holder.toggle.setId(a.getId());
holder.toggle.setChecked(a.getSelected());
if(a.getVisible() == false){
holder.toggle.setVisibility(ToggleButton.INVISIBLE);
}
holder.toggle.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View view)
{
// your click actions go here
((RadioGroup)view.getParent()).check(view.getId());
a.setSelected(holder.toggle.isChecked());
}
});
holder.group.addView(holder.toggle);
}
holder.group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
public void onCheckedChanged(RadioGroup group, int checkedId){
for (int j = 0; j < group.getChildCount(); j++) {
final ToggleButton view = (ToggleButton) group.getChildAt(j);
view.setChecked(view.getId() == checkedId);
}
}
});
view.setTag(holder);
}
else{
view = convertView;
}
ViewHolder viewholder = (ViewHolder)view.getTag();
viewholder.vraag.setText(vragen.get(holder.position).getVraag());
return view;
}
static class ViewHolder {
TextView vraag;
RadioGroup group;
ToggleButton toggle;
int position;
}
公共类BezoekverslagDetailsListAdapter扩展了ArrayAdapter{
公共语境;
公开名单;
视窗座;
公共BezoekverslagDetailsListAdapter(活动上下文,列表vragen){
超级(上下文,R.layout.vraag_项,vragen);
this.context=上下文;
this.vragen=vragen;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父级){
视图;
//convertView=null;
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图=充气机。充气(R.layout.vraag_项,空,假);
holder=新的ViewHolder();
holder.vraag=(TextView)view.findViewById(R.id.tv\u vraag);
holder.group=(RadioGroup)view.findViewById(R.id.toggleGroup);
holder.position=位置;
holder.toggle=新的ToggleButton(上下文);
对于(最终Antwoord a:vragen.get(holder.position.getAntwoorden()){
holder.toggle=新的ToggleButton(上下文);
holder.toggle.setText(a.getAntwoord());
holder.toggle.setTextOn(a.getAntwoord());
holder.toggle.setTextOff(a.getAntwoord());
holder.toggle.setId(a.getId());
holder.toggle.setChecked(a.getSelected());
如果(a.getVisible()==false){
holder.toggle.setVisibility(ToggleButton.INVISIBLE);
}
holder.toggle.setOnClickListener(新的OnClickListener()
{
@凌驾
公共void onClick(视图)
{
//您的单击操作将转到此处
((RadioGroup)view.getParent()).check(view.getId());
a、 setSelected(holder.toggle.isChecked());
}
});
holder.group.addView(holder.toggle);
}
holder.group.setOnCheckedChangeListener(新的RadioGroup.OnCheckedChangeListener(){
检查更改后的公共无效(RadioGroup组,int checkedId){
对于(int j=0;jpublic class BezoekverslagDetailsListAdapter extends ArrayAdapter<Vraag>{
public Context context;
public List<Vraag> vragen;
ViewHolder holder;
int i;
public BezoekverslagDetailsListAdapter(Activity context, List<Vraag> vragen){
super(context, R.layout.vraag_item, vragen);
this.context = context;
this.vragen = vragen;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
convertView = null;
final Vraag vraag = vragen.get(position);
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.vraag_item, null, false);
holder = new ViewHolder();
holder.vraag = (TextView)view.findViewById(R.id.tv_vraag);
holder.group = (RadioGroup)view.findViewById(R.id.toggleGroup);
holder.position = position;
holder.toggle = new ToggleButton(context);
for(final Antwoord a : vraag.getAntwoorden()){
holder.toggle = new ToggleButton(context);
holder.toggle.setText(a.getAntwoord());
holder.toggle.setTextOn(a.getAntwoord());
holder.toggle.setTextOff(a.getAntwoord());
holder.toggle.setId(i);
holder.toggle.setChecked(a.getSelected());
if(a.getVisible() == false){
holder.toggle.setVisibility(ToggleButton.INVISIBLE);
}
holder.toggle.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View view)
{
// your click actions go here
((RadioGroup)view.getParent()).check(view.getId());
if(a.getSelected()==true){
a.setSelected(false);
}
else if(a.getSelected()==false){
for(Antwoord b: vraag.getAntwoorden()){
if(b.getSelected()==true){
b.setSelected(false);
}
}
a.setSelected(true);
vraag.setAntwoord(a.getAntwoord());
}
}
});
i++;
holder.group.addView(holder.toggle);
}
view.setTag(holder);
}
else{
view = convertView;
holder = (ViewHolder) view.getTag();
}
ViewHolder viewholder = (ViewHolder) view.getTag();
viewholder.vraag.setText(vraag.getVraag());
holder.group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
public void onCheckedChanged(RadioGroup group, int checkedId){
for (int j = 0; j < group.getChildCount(); j++) {
final ToggleButton view = (ToggleButton) group.getChildAt(j);
view.setChecked(view.getId() == checkedId);
//vragen.get(holder.position).getAntwoorden().get(view.getId()).setSelected(view.getId() == checkedId);
}
}
});
view.setTag(viewholder);
return view;
}
static class ViewHolder {
TextView vraag;
RadioGroup group;
ToggleButton toggle;
int position;
}