2011-05-25 17 views
20

मेरा आवेदन ListView का उपयोग करता है जो सेल में विभिन्न आइटम प्रदर्शित करता है। इसमें फोटो और नाम होना चाहिए, लेकिन इसमें विवरण और आइकन होना चाहिए।जब मैं सूची स्क्रॉल करता हूं तो आइटम गायब क्यों होते हैं?

समस्या यह है: जब मैं ListView स्क्रॉल करता हूं और शीर्ष पर वापस आ जाता हूं, तो विवरण और आइकन गायब हो जाते हैं, केवल छवि और नाम होते हैं। मेरे पास इंप्रेशन है कि विवरण और आइकन को प्रत्येक पंक्ति के लिए समान आकार के लिए हटा दिया गया है।

मैं अपने ListView के लिए एक कस्टम एडाप्टर (BaseAdapter) का उपयोग करें:

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 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 द्वारा लौटाई जाती है, ताकि आप अन्य ब्लॉक में holder.bio.setVisibility(View.GONE) कर सकें।

+0

यह सही है! धन्यवाद! – user420574

+4

जाओ आपने मुझे 1 सप्ताह पुरानी गड़बड़ी से बचाया है: डी –

+0

अच्छा @ डॉन ....... – Benjamin

0

मुझे एक ही समस्या थी।

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

समाधान के लिए धन्यवाद!

संबंधित मुद्दे

 संबंधित मुद्दे