2016-11-21 6 views
0

Ich habe andere ähnliche Themen gelesen und ich habe alle Tipps, denke ich, aber ich sehe Verzögerungen beim Scrollen. Ich verstehe nicht, was ich tun muss, um es zu verhindern. Ich denke, dass mir etwas fehlt, da das ListView nicht gut scrollt.Android: Wie optimiert man ListView?

Hier ist mein Code. Ich verwende Picasso, um Bilder zu laden. Was mache ich hier falsch?

public class CustomAdapter extends ArrayAdapter<CustomObjects> 
{ 
    Context context; 
    int layoutResourceId; 
    List<CustomObjects> data = null; 

    public CustomAdapter(Context context, int layoutResourceId, List<Objects> data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     final ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = LayoutInflater.from(getContext()).inflate(layoutResourceId, parent, false); 
      holder.img = (ImageView) convertView.findViewById(R.id.objectImage); 

      holder.title = (TextView) convertView.findViewById(R.id.title); 
      holder.field2 = (TextView) convertView.findViewById(R.id.field2); 
      holder.field3 = (TextView) convertView.findViewById(R.id.field3); 
      holder.field4 = (TextView) convertView.findViewById(R.id.field4); 
      holder.field5 = (TextView) convertView.findViewById(R.id.field5); 
      convertView.setTag(holder); 
     }else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     CustomObjects customObject = getItem(position); 

     Picasso.with(getActivity()) 
       .load(customObject.getImgUrl()) 
       .tag("image") 
       .into(holder.img);    

     holder.title.setText(customObject.getName()); 
     holder.field2.setText(customObject.getField2()); 
     holder.field3.setText(customObject.getField3()); 
     holder.field4.setText(customObject.getField4()); 
     holder.field5.setText(customObject.getField5()); 
     return convertView; 
    } 
} 

ViewHolder:

private static class ViewHolder { 
    TextView title; 
    ImageView img; 
    TextView field1; 
    TextView field2; 
    TextView field3; 
    TextView field4; 
} 

i-Upload Bild stoppen auch beim Scrollen:

//Its my ListView (objectsList) 
objectsList.setOnScrollListener(new SampleScrollListener(getActivity())); 

public class SampleScrollListener implements AbsListView.OnScrollListener { 
    private final Context context; 

    public SampleScrollListener(Context context) { 
     this.context = context; 
    } 

    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
     final Picasso picasso = Picasso.with(context); 
     if (scrollState == SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_TOUCH_SCROLL) { 
      picasso.resumeTag("image"); 
     } else { 
      picasso.pauseTag("image"); 
     } 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, 
         int totalItemCount) {int lastInScreen = firstVisibleItem + visibleItemCount; 
     if (lastInScreen == totalItemCount) { 
      if(isUploaded == false && isLoading==false) { 
       isLoading = true; 
       // Async loading of objects 
      } 
     } 

    } 
} 

Und meine Listview:

<ListView 
    android:layout_marginLeft="0dp" 
    android:layout_marginRight="0dp" 
    android:paddingRight="0dp" 
    android:paddingLeft="0dp" 
    android:fastScrollEnabled="false" 
    android:layout_marginTop="0dp" 
    android:id="@+id/objectsList" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:footerDividersEnabled="false" 
    android:scrollingCache="false" 
    android:animationCache="false" 
    android:smoothScrollbar="true" 
    android:divider="@android:color/transparent" 
    android:dividerHeight="0dp" 
    android:cacheColorHint="#00000000" 
    android:clipToPadding="false" 
    android:overScrollFooter="@android:color/transparent"/> 

Antwort

0

Problem ist gelöst. Ich habe gerade das Telefon von USB getrennt. Ich kenne die Ursache des Problems nicht.

0

ich Ihnen vorschlagen Glide zu verwenden: die Wechseln von Picasso ist trivial und Glide Speicher besser verwalten. Keine Verzögerung mehr bei Scroll.

+0

"Glide Speicher besser verwalten." Quelle? oder ist das dein persönliches Gefühl aufgrund deiner Beobachtung? – njzk2

+0

https://inthecheesefactory.com/blog/get-to-know-glide-recommitted-by-google/en ist aber auch mein persönliches Gefühl. Wenn die Liste lang ist, ist der Unterschied offensichtlich. Ich schlage vor, Sie versuchen es, es dauert nur zwei Minuten. –