2013-10-22 3 views
2
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 

      if (selectedCourses.contains(courseNames.get(position))){ 
       selectedCourses.remove(selectedCourses.lastIndexOf(courseNames.get(position))); 
       Toast.makeText(getApplicationContext(), 
         courseNames.get(position) + " removed", Toast.LENGTH_LONG) 
         .show(); 

       row = view; 
       row.setBackgroundResource(R.drawable.charback); 

       System.out.println(selectedCourses); 
      } 

      else{ 
       selectedCourses.add(courseNames.get(position)); 
       Toast.makeText(getApplicationContext(), 
         courseNames.get(position) +" added", Toast.LENGTH_LONG) 
          .show(); 

       row = view; 
       row.setBackgroundResource(R.drawable.white); 

       myarrayAdapter.notifyDataSetChanged(); 
       System.out.println(selectedCourses); 

      } 

선택된 항목은 흰색집니다하지만보기에 온다 또한 약 12 ​​항목 늦게 또 다른 임의의 항목이 그냥 흰색집니다 아래로 변경? 누군가 나를 도울 수 있니?ListView 항목의 색상 문제가 변경되었습니다. 여러 항목은보기

답변

0

하면이 시도 라인 ....

0

어댑터의 getView 메서드가 제공된 convertView을 재활용/재사용하지 않습니다. convertView 널이 아닌 경우

는, 즉 재사용되는 도면을 의미한다. 즉, 항목을 선택하지 않으면 명시 적으로 배경 자원을 기본값으로 설정해야합니다. 기본의 배경을 재설정 하지이기 때문에 당신이 다시 사용 된 흰색 배경을보고있는 이유입니다.

뭔가 같은 :) (

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 

     if (selectedCourses.contains(courseNames.get(position))){ 
      selectedCourses.remove(selectedCourses.lastIndexOf(courseNames.get(position))); 
      Toast.makeText(getApplicationContext(), 
        courseNames.get(position) + " removed", Toast.LENGTH_LONG) 
        .show(); 

      row = view; 
      row.setBackgroundResource(R.drawable.charback); 

      System.out.println(selectedCourses); 
     } 

     else{ 
      selectedCourses.add(courseNames.get(position)); 
      Toast.makeText(getApplicationContext(), 
        courseNames.get(position) +" added", Toast.LENGTH_LONG) 
         .show(); 

      row = view; 
      row.setBackgroundResource(R.drawable.white); 

      System.out.println(selectedCourses); 

     } 

나는 myarrayAdapter.notifyDataSetChanged을 제거;

if (convertView != null) { 
    if (selectedCourses.contains(courseNames.get(position))){ 
     convertView.setBackgroundResource(R.drawable.white); 
    } else { 
     convertView.setBackgroundResource(R.drawable.charback); 
    } 
} 
0

이에 대한 홀더 클래스를 사용할 수 있습니다 :

를 어댑터 클래스에서 컴포넌트을 보유하고 다른 정적 클래스를 만들 : 그 그것을 사용 후 코드

static class MyHolder { 

     TextView mTextView; 
     RelativeLayout lv; 
     ImageView imgInvite; 
     RelativeLayout rel_bckground; 
    } 

아래 참조

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

      View row = convertView; 
      holder = null; 

      if (row == null) { 

     // initialize your components 
     holder = new MyHolder(); 
     holder.mImageView = (ImageView) row.findViewById(R.id.someID); 

     }else{ 

     holder = (MyHolder) row.getTag(); 
      } 
    } 
: 당신의 getView 방법에