2017-01-04 1 views
0

J'ai vu quelques questions similaires, mais je n'ai pas pu résoudre mon problème. J'ai un ListView avec un ImageView et TextView. J'utilise un adaptateur personnalisé et un pattern viewHolder mais ma liste ne défile pas toujours correctement? J'ai déjà téléchargé des images dans mon dossier mipmap, donc je ne les télécharge pas directement. Je ne sais pas quoi d'autre puis-je faire pour améliorer le défilement rapide, comme dans Quora ou toute autre application professionnelle ListView? Voici mon adaptateur:ListView défilement lisse dans Android?

class customAdapter extends BaseAdapter { 

ArrayList<Object> itemList; 
Activity context; 
public LayoutInflater inflater; 

public customAdapter(Activity context,ArrayList<Object> itemList) { 
    super(); 

    this.context = context; 
    this.itemList = itemList; 
    this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

} 

private static class ViewHolder { 
    TextView text; 
    ImageView image; 
} 

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

@Override 
public Object getItem(int position) { 
    return itemList.get(position); 
} 

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

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

    ViewHolder holder; 
    if(convertView == null){ 
     holder = new ViewHolder(); 

     convertView = inflater.inflate(R.layout.custom_row, parent, false); 
     holder.text = (TextView) convertView.findViewById(R.id.text); 
     holder.image = (ImageView) convertView.findViewById(R.id.image); 
     convertView.setTag(holder); 
    } else 
     // View is being recycled, retrieve the viewHolder object from tag 
     holder = (ViewHolder) convertView.getTag(); 

     ListItem items = (ListItem) itemList.get(position); 
     holder.text.setText(items.getText()); 
     holder.image.setImageResource(items.getImg()); 

     return convertView; 
    } 
} 

Voici mon custom_row:

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

<ImageView 
    android:layout_width="70dp" 
    android:layout_height="70dp" 
    android:id="@+id/image" 
    android:layout_marginTop="25dp" 
    android:layout_marginLeft="20dp" 
    android:src="@mipmap/austria" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Large Text" 
    android:id="@+id/text" 
    android:layout_marginTop="45dp" 
    android:layout_marginLeft="30dp" 
    android:textColor="#ffffff" 
    android:textStyle="bold" /> 

Et voici l'échantillon d'images J'utilise: http://img.freeflagicons.com/thumb/round_icon/austria/austria_640.png

+0

Pourquoi utilisez-vous 'ListView' s'il y a' RecyclerView' pendant un moment? Afficher aussi s'il vous plaît poster votre 'custom_row.xml' et un échantillon d'images que vous utilisez ici. – Divers

+0

Je suis relativement nouveau à Android, et en essayant de développer ma première application. J'ai donc pensé que ListView était un bon choix. –

+0

Hmm .. Je ne vois aucun problème dans le côté de l'adaptateur. Peut-être que vous devriez être plus précis sur la façon dont vous allez chercher les données listview (pas seulement l'image bien sûr) et le peupler –

Répondre

2

Vérifiez la taille les images. Charger des images de plus grande taille a un impact sur les performances de la liste de lecture