2013-10-15 2 views
-2

뷰를 재활용하는 데 문제가 있습니다. 레이아웃을 2 개 사용하고 있지만 위아래로 스크롤 할 때 일부 행이 레이아웃을 변경합니다. 나는 약간의 성공으로 다른 튜토리얼을 시도했다. 어떤 제안?ListView 재활용 뷰, 다중 레이아웃

public class CustomAdapter extends BaseAdapter { 

    Date date = new Date(); 
    private OfferList[] offers; 
    private String nameCompare = ""; 
    LayoutInflater inflater = getLayoutInflater(); 


    CustomAdapter (OfferList[] offers, FetchItemsTask fetchItemsTask) { 
     this.offers = offers; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     ViewHolder holder = null; 
     if (convertView == null) { 
      holder = new ViewHolder(); 

      if (getItemViewType(position) == 0) { 
       convertView = inflater.inflate(R.layout.list_offer_group, null); 
      } 
      else { 
       nameCompare = offers[position].getName(); 
       convertView = inflater.inflate(R.layout.list_offer, null); 
      } 

      holder.name = (TextView) convertView.findViewById(R.id.name); 
      holder.color = (TextView) convertView.findViewById(R.id.car_color_stock); 
      holder.time = (TextView) convertView.findViewById(R.id.time); 
      holder.offerStatus = (TextView) convertView.findViewById(R.id.offer_status); 

      convertView.setTag(holder); 

     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.name.setText(offers[position].getCustomerName()); 
     holder.carStockColor.setText(offers[position].getVehicleYear() + " " + offers[position].getVehicleMake()); 
     java.util.Date time1 = new java.util.Date(Long.parseLong(offers[position].getModified())); 
     holder.time.setText(time1.toString().substring(0, 11) + " | "); 
     holder.offerStatus.setText(offers[position].getDealStatus()); 
     return convertView; 

    } 

    @Override 
    public int getViewTypeCount() { 
     return 2; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (nameCompare.equalsIgnoreCase(offers[position].getCustomerName())) { 
      return 0; 
     } 
     else { 
      return 1; 
     } 
    } 

    @Override 
    public int getCount() { 
     return offers.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public class ViewHolder { 
     public int type; 
     TextView name; 
     TextView color; 
     TextView time; 
     TextView offerStatus; 
    } 
} 
+0

당신은 이미이 질문을 게시했습니다 – tyczj

+0

그래, 나는 좋은 대답을 얻지 못했습니다. – ono

+0

같은 질문 인 새로운 질문을 만들지 마십시오 – tyczj

답변

2

다른 로직을 구현해야합니다. 코드의 문제는 convertView이 null이 아니거나 재활용되었음을 의미하지만 이전에는 데이터와 상관 관계가있는 다른 뷰를 부 풀린 경우 오래된 재활용 뷰의 레이아웃을 표시한다는 것입니다. 이 데이터 세트에 필요한 레이아웃이 아닌 다른 레이아웃).

재활용 된 뷰가 레이아웃을 부 풀린 경우이 특정 행에 필요하거나 다른 뷰를 팽창 시켰는지 확인해야합니다. 전자가 해당되는 경우 데이터를 설정할 수 있습니다. 그렇지 않으면 올바른보기를 부 풀려 야합니다.

+0

나는 어떻게 든 하나의 레이아웃을 팽창 시켜서 어떻게 든 할 생각이었습니다 – ono

+0

리사이징 된보기가 레이아웃을 부 풀었는지 확인하려면 어떻게해야합니까? 다른 시각이 부풀어 오르다? – ono