2011-05-25 97 views
20

我的應用程序使用一個ListView,它在單元格中顯示不同的項目。它必須有照片和名稱,但它恰好有說明和圖標。爲什麼當我滾動listView時項目消失?

問題是:當我滾動ListView並回到頂端時,說明和圖標消失,只有圖像和名稱。我有印象的描述和圖標已被刪除,以使每行具有相同的大小。

我使用自定義適配器(BaseAdapter)ListView

public class MyAdapterPark extends BaseAdapter { 

    private ArrayList<DataPark> datapark; 
    private LayoutInflater myInflater; 

    public MyAdapterPark (Context context, ArrayList<DataPark> _datapark) 
    { 
     this.myInflater = LayoutInflater.from(context); 
     this.datapark = _datapark; 

    } 


    @Override 
    public int getCount() { 
     return this.datapark.size(); 
    } 

    @Override 
    public Object getItem(int arg0) { 
     return this.datapark.get(arg0); 

    } 

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


    public static class ViewHolder { 
     ImageView image; 
     TextView text01; 
     ImageView facebook; 
     ImageView twitter; 
     ImageView linkedin; 
     ImageView blog; 
     ImageView music; 
     TextView bio; 
    } 


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

     if(convertView == null) 
     { 
      convertView = myInflater.inflate(R.layout.affichageitem, null); 
      holder = new ViewHolder(); 
      holder.image = (ImageView)convertView.findViewById(R.id.img); 
      holder.text01 = (TextView)convertView.findViewById(R.id.user); 
      holder.facebook = (ImageView)convertView.findViewById(R.id.facebook); 
      holder.twitter = (ImageView)convertView.findViewById(R.id.twitter); 
      holder.linkedin = (ImageView)convertView.findViewById(R.id.linkedin); 
      holder.blog = (ImageView)convertView.findViewById(R.id.blog); 
      holder.music = (ImageView)convertView.findViewById(R.id.music); 
      holder.bio = (TextView)convertView.findViewById(R.id.bio); 



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

     holder.text01.setText(datapark.get(position).nickname); 

     if (!(datapark.get(position).pic.equals(""))){ 
     try { 
      //byte[] decodedString; 
      //decodedString = Base64.decode(datapark.get(position).pic); 
      //Bitmap bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
      //holder.image.setImageBitmap(bitmap); 
      holder.image.setImageBitmap(telechargerImage(datapark.get(position).pic)); 



     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     }else{ 
      holder.image.setImageResource(R.drawable.profilbase); 

     } 

     if (!(datapark.get(position).facebook.equals(""))){ 

      holder.facebook.setImageResource(R.drawable.fb); 

      }else{ 
       ((ImageView)convertView.findViewById(R.id.facebook)).setVisibility(View.GONE); 
      } 

     if (!(datapark.get(position).twitter.equals(""))){ 

      holder.twitter.setImageResource(R.drawable.twitter); 

      }else{ 
       ((ImageView)convertView.findViewById(R.id.twitter)).setVisibility(View.GONE); 
      } 

     if (!(datapark.get(position).linkedin.equals(""))){ 

      holder.linkedin.setImageResource(R.drawable.linkedin); 

      }else{ 
       ((ImageView)convertView.findViewById(R.id.linkedin)).setVisibility(View.GONE); 
      } 

     if (! (datapark.get(position).blog.equals(""))){ 

      holder.blog.setImageResource(R.drawable.blog); 

      }else{ 
       ((ImageView)convertView.findViewById(R.id.blog)).setVisibility(View.GONE); 
      } 


     if (!(datapark.get(position).music.equals(""))){ 

      holder.music.setImageResource(R.drawable.music); 

      }else{ 
       ((ImageView)convertView.findViewById(R.id.music)).setVisibility(View.GONE); 
      } 

     if (!(datapark.get(position).bio.equals(""))){   

      holder.bio.setText(datapark.get(position).bio); 

      }else{ 
       ((TextView)convertView.findViewById(R.id.bio)).setVisibility(View.GONE); 
      } 




     return convertView; 
    } 

    public static Bitmap telechargerImage(String url) { 
     Bitmap bm = null; 
     try { 
      URL aURL = new URL(url); 
      URLConnection conn = aURL.openConnection(); 
      conn.connect(); 
      InputStream is = conn.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is); 
      bm = BitmapFactory.decodeStream(bis); 
      bis.close(); 
      is.close(); 
     } catch (IOException e) { 
      Log.e("Erreur","Erreur lors de la récupération de l'image : " + e.getMessage().toString()); 
     } 
     return bm; 
    } 

} 

而且我的適配器的XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#eaf4f0" 
    > 

    <ImageView 
     android:id="@+id/img" 
     android:layout_width="70px" 
     android:layout_height="70px" 
     android:background="@drawable/carre" 
     android:scaleType="fitXY" 
     android:padding="5sp" 
     android:layout_marginLeft="0sp" 
     android:src="@drawable/profilbase" 
     android:layout_margin="5sp" 
     /> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:paddingLeft="0sp" 
     android:layout_weight="1" 
     > 

     <TextView android:id="@+id/user" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textSize="14px" 
      android:textColor="#000000" 
      android:textStyle="bold" 
      android:text=""  
      android:layout_marginTop="5sp" 
      /> 

      <TextView android:id="@+id/bio" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textSize="14px" 
      android:textColor="#000000" 
      android:layout_marginTop="1sp" 
      android:layout_marginRight="2sp" 
      android:text=""  
      /> 

     <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="4sp" 
     android:layout_marginBottom="4sp" 
     > 
     <ImageView 
     android:id="@+id/facebook" 
     android:layout_width="17px" 
     android:layout_height="17px" 
     android:scaleType="fitXY" 
     android:layout_gravity="center" 
     /> 
     <ImageView 
     android:id="@+id/twitter" 
     android:layout_width="17px" 
     android:layout_height="17px" 
     android:scaleType="fitXY" 
     android:layout_gravity="center" 
     android:layout_marginLeft="5sp" 
     /> 
     <ImageView 
     android:id="@+id/linkedin" 
     android:layout_width="17px" 
     android:layout_height="17px" 
     android:scaleType="fitXY" 
     android:layout_gravity="center" 
     android:layout_marginLeft="5sp" 
     /> 
     <ImageView 
     android:id="@+id/blog" 
     android:layout_width="17px" 
     android:layout_height="17px" 
     android:scaleType="fitXY" 
     android:layout_gravity="center" 
     android:layout_marginLeft="5sp" 
     /> 
     <ImageView 
     android:id="@+id/music" 
     android:layout_width="17px" 
     android:layout_height="17px" 
     android:scaleType="fitXY" 
     android:layout_gravity="center" 
     android:layout_marginLeft="5sp" 
     /> 
     </LinearLayout> 

    </LinearLayout> 

</LinearLayout> 

謝謝!

回答

45

這是因爲你有時隱藏了你的一些觀點,而你從不再顯示它們。例如:

 if (!(datapark.get(position).bio.equals(""))){   
      holder.bio.setText(datapark.get(position).bio); 
     }else{ 
      ((TextView)convertView.findViewById(R.id.bio)).setVisibility(View.GONE); 
     } 

,而不是嘗試:

 if (!(datapark.get(position).bio.equals(""))){ 
      holder.bio.setVisibility(View.VISIBLE);   
      holder.bio.setText(datapark.get(position).bio); 
     }else{ 
      holder.bio.setVisibility(View.GONE); 
     } 

記住的觀點被回收,所以,除非你展示你的意見返回一個接下來的時間,他們將永遠不會再次出現。另外,請記住holder.bio與findViewById返回的內容是相同的,因此您可以在else塊中執行holder.bio.setVisibility(View.GONE)

+0

沒錯!謝謝! – user420574 2011-05-25 10:08:54

+4

你已經救了我從1周舊混亂:D – 2011-09-01 04:45:17

+0

很好@dmon ....... – Benjamin 2016-08-24 05:38:35

0

我有同樣的問題。

 if (!imageuri.isEmpty()) { 
      rl.setVisibility(View.VISIBLE); 
      SmartImageView imageView = (SmartImageView) view.findViewById(R.id.detailimageView1); 
      imageView.setImageUrl(imageuri); 
     } else {    
      rl.setVisibility(View.GONE); 
     } 

感謝您的解決方案!

相關問題