android,在AlertDialog里面用自定义的BaseAdapter写了一个ListView。出现两个问题。

2025-02-25 12:53:01
推荐回答(3个)
回答1:

// BaseAdapter。被执行了两次。
BaseAdapter的getView(。。。)。被执行了n次,是正常的,不执行多次才异常;

1、BaseAdapter和ListView的关系:
1.1、ListView显示几行,BaseAdapter的 public View getView(int position, View convertView, ViewGroup parent) 就执行几次,BaseAdapter的目的就是为显示准备数据的;
1.2、position表示ListView显示的第几行,从0到n行;

2、因为看不出if(on_off==1){ } else {}中on_off如何赋值,也就无法明白check01.setChecked(false/true)如何执行;

3、CheckedTextView监听方法:
(CheckedTextView) checkedTextView=CheckedTextView)findViewById(R.id.checkedTextView);
checkedTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
checkedTextView.toggle(); // 翻转
// checkedTextView.setChecked(false/true);
}
});

4、猜想,因为看不到on_off的改变,ListView里面的多选项没有被选中就很自然,下面应该只执行 else {} 部分;
if(on_off==1){
System.out.println(position);
System.out.println("on_off******************"+on_off);
check01.setChecked(true);
}else{
check01.setChecked(false);
System.out.println("on_off******************"+on_off);
}

5、回答你这个问题很难,因为你没有提供必要的信息,回答者只能连蒙带猜,也不一定回答清楚,对你有所帮助,抱歉。

回答2:

你怎知道被执行了两次?

回答3:

1. 没看出哪里执行了两次, 你可以在list.setAdapter那里断点debug一下。
2. 这里你没有必要在listitem里面监听并更改checkbox的状态, 你直接监听就OnCheckedChangeListener就行了。