0

listviews 용 어댑터를 작성했습니다. 속성을 기반으로 다른 레이아웃으로 뷰의 일부 요소를 그려야합니다.BaseAdapter 문제 목록보기가있는 getView (int position)

그래서 내가 어댑터와의 getView (INT 위치) 내가 property.get을 확인 (위치)에 두 개의 ArrayList의 데이터와 ArrayList의 속성을 통과

이 문제는 그 위치 전체에 관련하지 않는 것입니다 목록에만 있지만 현재보기에 따라 변경되는 부분 (예 : 스크롤)

원하는 효과를 얻으려면 어떻게해야합니까? 문제가 데이터 arraylist에 영향을 미치지 않는 이유는 무엇입니까? getItemViewTypegetViewTypeCount

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

    /** 
    * Holder mantiene una reference all'albero delle views per evitare chiamate continue di findiViewById 
    */ 
    ViewHolder holder; 

    if (view == null){ 

     /** si usa inflate solo se è null */ 
     holder = new ViewHolder(); 



     if (!lemon.get(position)){ 
      view = mInflater.inflate(R.layout.contact_layout, null); 
      holder.name = (TextView) view.findViewById(R.id.contact_name); 
     }else { 
      view = mInflater.inflate(R.layout.contact_lemon_layout, null); 
      holder.name = (TextView) view.findViewById(R.id.contact_name); 
     } 

     view.setTag(holder); 


    }else { 


     holder = (ViewHolder) view.getTag(); 
    } 


    holder.name.setText(names.get(position)); 

    return view; 
} 

답변

1

만들기 사용 :

 @Override 
     public int getViewTypeCount() { 
      return 2; 
     } 
     @Override 
     public int getItemViewType(int position) { 
      return lemon.get(position)?0:1; 
     } 

귀하의 코드는 이제 getView에서 작동합니다.

+0

감사합니다. 어떻게 뷰 유형을 설정합니까? 그냥 getView에서 동일한 작업을 수행 할 수있는 방법이 있는지 알고 싶습니까? – codareee

+1

그게 전부입니다. 당신은 static int TYPE_LEMON = 0과 0과 1 대신 static int TYPE_NOT_LEMON = 1을 사용해야합니다. getView에서 getItemViewType (position)을 사용하여 팽창 할 것을 선택하고 뷰를 준비하는 방법을 선택하기 만하면됩니다. 하지만 어쨌든이 두 함수 만 추가하면 코드가 완벽하게 작동합니다. 도움을 주신 덕분에 –

+0

해결되었습니다. – codareee