Intereting Posts

Почему элементы исчезают, когда я просматриваю 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> 

Благодаря!

Solutions Collecting From Web of "Почему элементы исчезают, когда я просматриваю listView?"

Это потому, что иногда вы скрываете некоторые ваши взгляды, и вы никогда не показываете их снова. Пример:

  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) в блоке else.

У меня такая же проблема.

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

Спасибо за решение!