2011-09-29 3 views
3

ArrayAdapter를 통해 채워진 ListView가 있습니다. 어댑터 내에서 조건에 따라보기 배경색을 설정합니다. 작동하지만 나머지 행을 스크롤하는 동안이 색상이 적용됩니다. 다음은 몇 가지 코드입니다.Android + ListView 배경에서 스크롤하는 동안 배경을 설정 하시겠습니까?

class DateAdapter extends ArrayAdapter<DateVO> { 
    private ArrayList<DateVO> items; 
    public ViewGroup listViewItem; 

    //constructor 
    public DateAdapter(Context context, int textViewResourceId, ArrayList<DateVO> items) { 
     super(context, textViewResourceId, items); 
     this.items = items; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     try { 
      if (view == null) { 
       LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = vi.inflate(R.layout.row, null); 
      } 

      final DateVO dateItem = items.get(position); 

      if (dateItem != null) { 

       //is this my issue here? does position change while scrolling? 
       if(items.get(position).getField().equals("home")){ 
        view.setBackgroundResource(R.drawable.list_bg_home); 
       } 
       ... 
      } 

     }catch (Exception e) { 
      Log.i(ArrayAdapter.class.toString(), e.getMessage()); 
     } 

     return view; 
    } 
} 

답변

7

ListView의 기본 동작입니다. cacheColorHint를 투명하게 설정하면 재정의 할 수 있습니다. xml 파일에

android:cacheColorHint="#00000000" 

을 그냥 추가하면됩니다.

자세한 내용은 ListView Backgrounds 문서를 참조하십시오. 여기 가 발췌 한 것입니다

이 문제를 해결하려면, 당신이 할 일은이 아닌 단색 배경을 사용하거나 적절한 단색에 힌트를 설정하면, 캐시 컬러 힌트 최적화를 해제 중 하나입니다 값. android : cacheColorHint 특성을 사용하여 코드에서 (setCacheColorHint (int)를 참조하십시오) 또는 XML에서 선호하는 방식으로이 작업을 수행 할 수 있습니다. 최적화를 사용하지 않으려면 투명한 색 # 00000000을 사용하면됩니다. cacheColorHint = "# 00000000"는 XML 레이아웃 파일에 설정

편집 : convertView로 전달 뷰는 기본적으로 목록보기의 일부 전망이지만, ISN '다음 스크린 샷은 안드로이드와 목록을 보여줍니다 더 이상 보이지 않습니다 (스크롤로 인해). 실제로는 사용자가 만든보기이고 사용자 지정 배경을 설정 한보기 일 수 있습니다. 이 문제를 해결하려면 조건이 만족스럽지 않으면 배경을 다시 설정하십시오. 이런 식으로 뭔가 : 당신이 convertView으로 오래된 사용자 정의보기를 전송되었을 수 있습니다 때문에 조건이 만족되지 않은 경우

if(condition_satisfied) { 
    //set custom background for view 
} 
else { 
    //set default background for view 
    convertView.setBackgroundResource(android.R.drawable.list_selector_background); 
} 

은 기본적으로 당신이 해야합니다, 당신의 조건이 만족 될 때 당신이하고있는 어떤 사용자 정의한 내용을 취소합니다. 그게 당신의 문제를 해결해야합니다.

+0

게시물을 보내 주셔서 감사하지만 cacheColorHint는 내 문제가 아닙니다 (위 참조). – worked

+0

Genius! 고마워요! – worked

+0

도와 주셔서 감사합니다 :) –

관련 문제