2010-09-02 65 views
0

好的,我在我的应用程序中有一个列表活动。 我试图做到这一点,当选择列表项目来显示选择时,视图的背景应该改变。但是现在,当我选择一个项目时,该项目会被选中,但随机列表项目的背景会同时发生变化,但选择仍然正确。 我在哪里犯错?Android列表活动

protected void onListItemClick(ListView l, View v, int position, long id) { 
    // TODO Auto-generated method stub 
    super.onListItemClick(l, v, position, id); 

    Cursor c = (Cursor) mAdapter.getItem(position); 
    String a = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
    String b = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

    if (names != null) 
    { 
     if(numbers.contains(b)) 
     { 
      names = names.replace(a+";", ""); 
      numbers = numbers.replace(b+";", ""); 
      v.setBackgroundResource(R.drawable.background); 
     } 
     else{ 
      names = names + a + ";"; 
      numbers = numbers + b + ";"; 
      v.setBackgroundResource(R.drawable.background_sel); 
     } 
    } 
    else 
    { 
     names = a+";"; 
     numbers = b+";"; 
     v.setBackgroundResource(R.drawable.background_sel); 
    } 
} 

回答

0

我相信Android可以重复使用相同的视图来创建您的列表;这就是为什么当你为一个视图设置背景时,你可以看到其他列表元素也具有新的颜色。

要获得您想要的行为,您应该在ListView获取数据的相同位置记住/恢复'selected'状态以填充列表。您可能必须创建自己的ListAdapter并覆盖getView()以在每个项目(而不是每个视图对象)基础上设置背景。