2016-11-21 8 views
0

私は他の似たような話題を読んでいますが、私はすべてのヒントを使っていますが、スクロールするときに遅れがあります。私はそれを防ぐために何が必要なのか分かりません。私はリストビューがうまくスクロールしていないので、私は何かが欠けていると思う。Android:ListViewを最適化する方法

ここに私のコードです。私は画像を読み込むためにピカソを使用しています。私はここで間違って何をしていますか?

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:

//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を::

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

また、私はスクロールしながら画像をアップロード停止

<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また、私の個人的な感情です。 リストが長い場合、その違いは明らかです。試してみることをお勧めします。実際には2分しかかかりません。 –

関連する問題