2016-11-21 4 views
0

Я читал другие подобные темы, и я использовал все советы, я думаю, но я вижу лаги при прокрутке. Я не понимаю, что мне нужно сделать, чтобы предотвратить это. Я думаю, что я что-то пропускаю, поскольку ListView не прокручивается хорошо.Android: как оптимизировать ListView?

Вот мой код. Я использую Picasso для загрузки изображений. Что я здесь делаю неправильно?

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; 
} 

Также я остановить загрузки изображения во время прокрутки:

//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 
      } 
     } 

    } 
} 

И мой 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"/> 

ответ

0

Проблема решена. Я просто отключил телефон от USB. Я не знаю причину проблемы.

0

Я предлагаю вам использовать Glide: переключиться с Picasso является тривиальным, и Glide лучше управляет памятью. Больше нет промахов.

+0

«Скольжение лучше управляйте памятью». источник? или это ваше личное чувство, основанное на вашем наблюдении? – njzk2

+0

https://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en, но также и мое личное чувство. Когда список длинный, разница очевидна. Я предлагаю вам попробовать, это займет всего две минуты. –

 Смежные вопросы

  • Нет связанных вопросов^_^