2012-02-01 92 views
2

我有列表视图名称和数字和复选框填充与SimpleAdapter的联系人,并在项目上单击我监听事件和更改项目的颜色,我也想更改复选框启用和用户再次单击同一项目后我想取消选择该项目。 我该怎么做? 谢谢沃尔夫。取消选择查看视频项目?

这是我的代码,我可以成功地改变颜色,但我现在该怎么改变复选框状态为特定项目和比第二击再次更改状态并不:

lImenik.setOnItemClickListener(new OnItemClickListener() { 

    public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { 
     // TODO Auto-generated method stub 
     Object obj = lImenik.getItemAtPosition(position); 
     String tmp = obj.toString(); 
     view.setBackgroundColor(Color.GRAY); 

     for(int i = 0; i < adapter.getChildCount(); i++){ 
     if(i == position){ 
     if(position != prePos){ 

      adapter.getChildAt(i).setBackgroundColor(Color.GRAY);        
      prePos = position;        
      } else { 
      adapter.getChildAt(i).setBackgroundColor(0x191919); 
      prePos = -1; 
      }       
     }      
     }     
    } 
    }); 
} 

回答

2

的方法

public void onItemClick(AdapterView<?> adapter, View view, 
        int position, long id) 

为您提供了您点击过的行的视图。所有你需要做的是在该视图中标记或取消选中该复选框。你可以做到这一点的

public void onItemClick(AdapterView<?> adapter, View view, 
       int position, long id) { 
      // TODO Auto-generated method stub 
      Object obj = lImenik.getItemAtPosition(position); 
      CheckBox checkbox = (CheckBox) view.findViewById (R.id.your_checkedbox_id); 
      checkbox.setChecked (!checkbox.isChecked()) ; 

但是你应该有数组,或者你的对象一个布尔值,以便在年底就可以知道哪些对象标记为被检查的,哪些不是

+0

它的工作,但只为列表中的第一项,这是为什么? 当我点击第二项时,第一个复选框会再次改变状态。 – Wolf87 2012-02-01 21:15:46

+0

这是因为旧的观点,当重绘然后不保存陈述。你必须保存你的数据的状态,所以...... 请用你的list.size()的长度来取一个布尔数组。将每个项目标记为false。在你ListAdapter的getView()方法中。从视图中提取复选框将其标记为setChecked(array [position]);这样它可以将布尔状态与数组列表同步。 =然后在listView的onItemClick()中设置array [position] =!array [position];然后checkbox.setChecked(array [position]);尝试这个。并且您还将获得旧视图的检查数据保存 – Arslan 2012-02-01 21:22:08

相关问题