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;
} 展开
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;
} 展开
3个回答
展开全部
// 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、回答你这个问题很难,因为你没有提供必要的信息,回答者只能连蒙带猜,也不一定回答清楚,对你有所帮助,抱歉。
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、回答你这个问题很难,因为你没有提供必要的信息,回答者只能连蒙带猜,也不一定回答清楚,对你有所帮助,抱歉。
展开全部
1. 没看出哪里执行了两次, 你可以在list.setAdapter那里断点debug一下。
2. 这里你没有必要在listitem里面监听并更改checkbox的状态, 你直接监听就OnCheckedChangeListener就行了。
2. 这里你没有必要在listitem里面监听并更改checkbox的状态, 你直接监听就OnCheckedChangeListener就行了。
追问
1.我就是设置的
System.out.println("on_off******************"+on_off);
在logCat里面观察到的、而且不是两次、、、、是九次!!!!打错了。意思就是相同的System执行了九次。
2.关于OnCheckedChangeListener能不能给我点资料看看。
3.谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询