2013-03-25 3 views
-1

내 listview에는 하나의 이미지와 일부 textview가 있습니다. 가격과 특별 가격이 포함 된 두 개의 텍스트가 있습니다. 특별 가격이 0보다 작 으면 가격 textview와 특별 가격은 null로 설정하되 특별 가격은 설정 가격 값보다 0> 특별 가격, fisrt 시간보다 좋으면 모든 것이 잘됩니다. 하지만 내가 목록보기를 스크롤 할 때 dumyy 값으로 설정된 빈 텍스트 뷰 enter code here스크롤링 ListView가 더미 값을 채 웁니다.

여기 내 getView 메소드 코드입니다.

@Override 
public  View  getView(final int position, View convertView, ViewGroup parent){ 
//public View getView(int position, View convertView, ViewGroup parent) { 
    /*View vi = convertView; 
    if (convertView == null) 
    { 
     vi = inflater.inflate(R.layout.list_row, null); 
    } 
    */ 
    int pos=position; 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.list_row, null); 
     viewHolder=new ViewHolder(); 
     viewHolder.txt_id = (TextView) convertView.findViewById(R.id.id); // title 
     viewHolder.txt_product_name = (TextView) convertView.findViewById(R.id.title); // title 
     viewHolder.artist = (TextView) convertView.findViewById(R.id.artist); // artist 
                    // name 
     viewHolder.txt_mspecialprice_withouttax = (TextView) convertView.findViewById(R.id.duration); // duration 
     viewHolder.stock = (TextView) convertView.findViewById(R.id.stck); 
     viewHolder.txt_mprice_withouttax = (TextView) convertView.findViewById(R.id.txtmpricewithouttax); 

     viewHolder.thumb_image = (ImageView) convertView.findViewById(R.id.list_image); // thumb 
                       // image 


     convertView.setTag(viewHolder); 

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


    HashMap<String, String> song = new HashMap<String, String>(); 
    song = data.get(position); 

    // Setting all values in listview 
    String mspecialprice_str=song.get(CustomizedListView.KEY_PRODUCT_MSPECIAL_WITHOUT_TAX); 
    //String substr_mspecialprice_str=mspecialprice_str.substring(1,mspecialprice_str.indexOf(".")); 
    //String substr_mspecialprice_str_replaced=substr_mspecialprice_str.replace(",", ""); 

    String msaleprice_str=song.get(CustomizedListView.KEY_PRODUCT_MPRICE_WITHOUT_TAX); 
    //String substr_msaleprice_str=msaleprice_str.substring(0,msaleprice_str.indexOf(".")); 
    //String substr_msaleprice_str_replaced=substr_msaleprice_str.replace(",", ""); 

    viewHolder.txt_id.setText(song.get(CustomizedListView.KEY_PRODUCT_ID)); 
    viewHolder.txt_product_name.setText(song.get(CustomizedListView.KEY_PRODUCT_NAME)); 
    viewHolder.artist.setText(song.get(CustomizedListView.KEY_PRODUCT_DESCRIPTION)); 
    viewHolder.stock.setText(song.get(CustomizedListView.KEY_STOCK)); 
    if(mspecialprice_str.equals("0")) 
    { 
     //txt_mspecialprice_withouttax.setText(song.get(CustomizedListView.KEY_PRODUCT_MSPECIAL_WITHOUT_TAX)); 
     viewHolder.txt_mprice_withouttax.setText("$"+(song.get(CustomizedListView.KEY_PRODUCT_MPRICE_WITHOUT_TAX))); 

     viewHolder.txt_mprice_withouttax.setTextColor(Color.parseColor("#64aef9")); 

    } 
    //if(!(mspecialprice_str.equals("0"))) 
    //{ 
else 
{ 
    viewHolder.txt_mspecialprice_withouttax.setText("$"+(song.get(CustomizedListView.KEY_PRODUCT_MSPECIAL_WITHOUT_TAX))); 
    viewHolder.txt_mprice_withouttax.setText("$"+(song.get(CustomizedListView.KEY_PRODUCT_MPRICE_WITHOUT_TAX))); 
    viewHolder.txt_mprice_withouttax.setPaintFlags(viewHolder.txt_mprice_withouttax.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
    viewHolder.txt_mprice_withouttax.setTextColor(Color.parseColor("#F01616")); 
} 

    imageLoader.DisplayImage(
      song.get(CustomizedListView.KEY_PRODUCT_IMAGEURL), viewHolder.thumb_image); 

    return convertView; 
} 
} 

class ViewHolder { 
TextView txt_id ; // title 
TextView txt_product_name; // title 
TextView artist ; // artist 
                  // name 
TextView txt_mspecialprice_withouttax; // duration 
TextView stock ; 
TextView txt_mprice_withouttax; 

ImageView thumb_image ; // thumb 


} 
+0

우리가 왜 이것을 원한다고 말할 수 있습니까? 나는 네가 다른 문제에 직면 해 있다고 믿고 여기서 묻고있는 질문을 다시 말해야한다. – Atrix1987

+0

실제로 여기서 일어나는 일이 자세히 설명해 드리겠습니다. 내 listview에는 하나의 이미지가 포함되어 있고 textview에는 가격과 특별 가격이 포함 된 두 개의 textiview가 있습니다. 특별 가격은 textview와 가격 만 0으로 설정하면 null입니다. ,하지만 특별 가격은 특별 가격, fisrt 시간 모두가 잘되고 있지만 내가 목록보기를 스크롤 할 때 dumyy 값으로 설정된 빈 textview를 설정할 때의 가격보다 0 이상입니다. –

+1

pls 당신의 질문을 UR 코멘트에서 언급 한대로 편집 – Atrix1987

답변

1

ListView, GridView는 목록 항목/격자 요소로 사용되는보기를 다시 사용합니다. getView()는 매번 호출되며 안드로이드는보기를 스크롤하는 동안 다음 요소를 그려 봅니다. 저것을 막는 아무 필요도 없다!

수정 - 현상 docs

어댑터 오브젝트기로 어댑터 뷰 AdapterView 사이의 다리 역할을하고보기위한 기본 데이터에서 Atrix1987

. 어댑터는 데이터 항목에 대한 액세스를 제공합니다. 또한 어댑터는 데이터 세트의 각 항목에 대한보기를 작성해야합니다.

당신이 당신의 GridView/ListView에 최대 표시되는 항목 다음의 같은 5 뷰를 스크롤 할 때 5 개 요소의 나머지 부분을 표시하기 위해 재사용 할 수 5를 사용하여 표시 할 열 개 요소가 있다고 가정하자. 이것은 의도 한 행동이며 일을하는 올바른 방법입니다 [최소한의 견해를 유지합니다].

getView 메서드에 대한 제어 권한이 없으므로 프레임 워크에서이 작업을 수행합니다.

+0

답장을 보내 주셔서 감사합니다하지만 데이터가 listview/gridview에로드 된 후 getview 메서드를 한 번만 실행하려면 getview 메서드를 다시 실행해야합니다. –

+0

내 목록보기 항목 위치가 변경되어 목록보기 항목 위치도 변경하고 싶지 않습니다. –

+0

getView()는로드 된 후에 호출되지 않습니다. listview에서 무언가를 그릴 때 호출됩니다. 데이터 어댑터에 100 개의 요소가 있지만 listview는 한 번에 10 개의 요소 만 표시한다고 가정하면 10 개의 getView() 호출이 발생합니다. listview를 표시하려면 10 개만 필요합니다. 이것은 listview/gridview가 작동하는 방법입니다. – pelotasplus

0

GridView 위젯은 AdapterView까지 확장됩니다. 어댑터를 사용하여보기 재사용을 허용하고 성능을 향상시킵니다. getView() 전화를 피할 방법이 없습니다. AdapterView 아이디어 전체에 필수적입니다. 정적 레이아웃을 원하면 아마도 다른 것을 사용해야 할 것입니다.

+0

좋아, getview 호출을 몇 번이고 다시하지만 내 목록 뷰 행 위치 및 값을 변경하려면 싶지 않아.pls 여기 도와주세요. –

+0

OK, 당신은 실제로 어댑터의 개념을 이해하지 못합니다. 이 문제를 읽어 보면 위치 변경이 아이디어에 필수적이라는 것을 알 수 있습니다. getView를 호출 할 때마다 지정된 위치의 단일 객체에 대한 뷰가 반환됩니다. 어떻게 변하지 않을 수 있습니까? – Shade

+0

마침내 내 문제가 해결되었습니다. –

관련 문제