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

1.BaseAdapter。被执行了两次。2.ListView里面的多选项没有被选中(已经设置了setChecked(true))。下面是java代码。因为是一个很简单的... 1.BaseAdapter。被执行了两次。
2.ListView里面的多选项没有被选中(已经设置了setChecked(true))。
下面是java代码。因为是一个很简单的测试android,就不提供XML了。
------------------------------------------------------------------------------------------
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println("");
b1=(Button)findViewById(R.id.button);
b1.setText("dianji");
final AlertDialog.Builder bu=new AlertDialog.Builder(this);
b1.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
// TODO Auto-generated method stub
View v1=getLayoutInflater().inflate(R.layout.list, null);
list=(ListView)v1.findViewById(R.id.listview01);
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
list.setAdapter(new myadapter());
bu.setView(v1);
bu.show();
}
});
}

class myadapter extends BaseAdapter{

private String[] strs={"是否开启","日期","时间","内容","开启闹钟"};

public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v=getLayoutInflater().inflate(R.layout.row, null);

switch (position) {
case 0:check01=(CheckedTextView)getLayoutInflater().inflate(android.R.layout.simple_list_item_multiple_choice, null);
check01.setText(strs[position]);
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);
}
return check01;
case 1:
data01=(TextView)v.findViewById(R.id.text01);
data02=(TextView)v.findViewById(R.id.text02);
data01.setText(strs[position]);
data02.setText(data);

return v;
case 2:
time01=(TextView)v.findViewById(R.id.text01);
time02=(TextView)v.findViewById(R.id.text02);
time01.setText(strs[position]);
time02.setText(time);

return v;
case 3:
content01=(TextView)v.findViewById(R.id.text01);
content02=(TextView)v.findViewById(R.id.text02);
content01.setText(strs[position]);
content02.setText(content);

return v;
case 4:
check02=(CheckedTextView)getLayoutInflater().inflate(android.R.layout.simple_list_item_multiple_choice, null);
check02.setText(strs[position]);
if(alarm==1){

check02.setChecked(true);
}else{
check02.setChecked(false);

}
return check02;

}
return null;
}
展开
 我来答
fjzzmike
2012-11-17 · 超过16用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:51.7万
展开全部
// 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、回答你这个问题很难,因为你没有提供必要的信息,回答者只能连蒙带猜,也不一定回答清楚,对你有所帮助,抱歉。
jamesbongchan
2012-11-17
知道答主
回答量:65
采纳率:0%
帮助的人:7.2万
展开全部
你怎知道被执行了两次?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风中细叶
2012-11-16 · TA获得超过447个赞
知道小有建树答主
回答量:89
采纳率:0%
帮助的人:100万
展开全部
1. 没看出哪里执行了两次, 你可以在list.setAdapter那里断点debug一下。
2. 这里你没有必要在listitem里面监听并更改checkbox的状态, 你直接监听就OnCheckedChangeListener就行了。
追问
1.我就是设置的
System.out.println("on_off******************"+on_off);

在logCat里面观察到的、而且不是两次、、、、是九次!!!!打错了。意思就是相同的System执行了九次。
2.关于OnCheckedChangeListener能不能给我点资料看看。
3.谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式