Я читал другие подобные темы, и я использовал все советы, я думаю, но я вижу лаги при прокрутке. Я не понимаю, что мне нужно сделать, чтобы предотвратить это. Я думаю, что я что-то пропускаю, поскольку 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"/>
«Скольжение лучше управляйте памятью». источник? или это ваше личное чувство, основанное на вашем наблюдении? – njzk2
https://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en, но также и мое личное чувство. Когда список длинный, разница очевидна. Я предлагаю вам попробовать, это займет всего две минуты. –