为什么当我滚动的ListView项消失? [英] Why do items disappear when I scroll the listView?
问题描述
我的应用程序中使用的ListView
这显示在细胞中不同的项目。它必须有照片和姓名,但它发生有描述和图标。
My application use a ListView
which display different items in the cell. it must have photo and name, but it happens to have description and icons.
现在的问题是:当我滚动的ListView
,回到顶端,描述和图标都消失了,只有图像和名称。我有即时pression的描述和图标已被除去以具有相同的尺寸为每行
The problem is: when I scroll the ListView
and come back to the top, the description and icons have disappeared, there are only image and name. I have the impression the description and icons have been removed to have the same size for each row.
我用一个自定义的适配器(BaseAdapter)
我的的ListView
:
I use a custom adapter (BaseAdapter)
for my 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:
And the XML of my adapter:
<?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>
谢谢!
推荐答案
这是因为你隐藏了一些你的看法有时,你永远不会再次显示。例如:
It's because you're hiding some of your views sometimes, and you never show them again. Example:
if (!(datapark.get(position).bio.equals(""))){
holder.bio.setText(datapark.get(position).bio);
}else{
((TextView)convertView.findViewById(R.id.bio)).setVisibility(View.GONE);
}
而不是尝试:
instead try:
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)
。
这篇关于为什么当我滚动的ListView项消失?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!