2011-02-14 77 views
0

我正在开发一个简单的应用程序,其中我在列表的每一行中显示复选框和文本,但是当我选择或检查一​​个复选框时我的列表视图内的其他复选框会自动检查。 我已经做了很多谷歌上,无法找到一个方法来解决这个问题... 请帮我....关于列表视图内的复选框的选中状态

Thanx提前....

public void checkevent(View v) throws ParseException 
{ 
    lv=(ListView)v.getParent().getParent(); 

    int i=lv.getPositionForView(v); 

    Object o = lv.getItemAtPosition(i); 

    String item= o.toString(); 

    int q=item.indexOf("-",0); 

    String alarm_date=new_date+" "+item.substring(0,q); 

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 

    Date rdate = (Date)formatter.parse(alarm_date); 

    set_prog=item.substring(q+1,item.length())+" on "+item.substring(0,q); 

    if(((CompoundButton) v).isChecked()) 
    { 
    if(rdate.getTime()>=new Date().getTime()) 
    { 
     if(program_reminder_main.contains((alarm_date+"--"+item.substring(q+1,item.length())))) 
     { 
      Toast.makeText(this,"You have already selected this one", Toast.LENGTH_LONG).show(); 
      ((CompoundButton) v).setChecked(false); 

     } 
     else { 
      program_reminder_main+=("~"+alarm_date+"--"+item.substring(q+1,item.length())); 

     } 
     //To call the Alarm service Class at respective time 
    Toast.makeText(this, "Alarm Set For"+" "+item.substring(q+1,item.length())+" on "+item.substring(0,q), Toast.LENGTH_LONG).show(); 
    Intent myIntent = new Intent(MainClass.this, MyAlarmService_Movie.class); 

    pendingIntent = PendingIntent.getService(MainClass.this, 0, myIntent, 0); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 

     alarmManager.set(AlarmManager.RTC_WAKEUP,rdate.getTime()-30000,pendingIntent); 

} 
else { 
((CompoundButton) v).setChecked(false); 

     Toast.makeText(MainClass.this, "Alarm can't be set Before to crrent time", Toast.LENGTH_LONG).show(); 

    } 
} 
    else if(!((CompoundButton) v).isChecked()){ 
     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
     alarmManager.cancel(pendingIntent); 
     Toast.makeText(MainClass.this, "Reset Alarm", Toast.LENGTH_LONG).show(); 
    } 

} 

忽略额外事情......只关注复选框的代码......以及您的信息。我已经设置在复选框的属性上面的方法...

回答

1

复选框状态应该保存

声明一个布尔itemChecked并保存在它

boolean[] itemChecked = new boolean[100]; 
public View getView(int pos, View inView, ViewGroup parent) {  

final CheckBox checkBox = (CheckBox) v.findViewById(R.id.bcheck); 

checkBox.setTag(pos); checkBox.setOnClickListener(new OnClickListener() 
{  
@Override  
    public void onClick(View arg0) 
{  
     String position = (String) checkBox.getTag();  

if (checkBox.isChecked() == true) {  

itemChecked[Integer.valueOf(position)] = checkBox.isChecked();  

    } else { 

    itemChecked[Integer.valueOf(position)] = checkBox.isChecked();  
}   } }); 

checkBox.setChecked(itemChecked[pos]); 

    return (v); } 

请参考复选框状态:Automatic selection of checkboxes inside listview - android

+0

谢谢你的建议,但让我给我的代码给你... – user595226 2011-02-14 12:46:21

0

在我看来,

你应该小心在:

方法:getView(..) 和的onClick()

好运

3

的问题是,名单重用你的看法。

假设view1先与id1关联,然后检查它。然后,你滚动和view1被转换为显示ID为10.但由于视图没有重新创建,它仍然会有ID为1的项目的复选框状态。

所以基本上解决方案是存储某个地方哪些项目是选择和我们的getView方法,你会做

ckeckbox.setChecked(isItemChecked(position)); 

而且你必须实现isItemChecked(INT位置);

低效的,但工作的实施方法是使用布尔数组在您的活动,让我们说

boolean[] itemChecked; 

然后在getView,设置检查复选框上的监听器。您还可以使用数组设置选中的状态。

checkbox .setOnCheckedChangeListener (new OnCheckedChangeListener() { 
    public void onCheckedChanged (CompoundButton btn, boolean isChecked) { 
    itemChecked[position] = isChecked; 
} 
}); 

checkbox .setChecked(itemChecked[position]); 
+0

thanx manu,请再次检查上面的代码... – user595226 2011-02-14 12:55:10

相关问题