4

ユーザーを表示するカスタムリストビューがあり、そこに写真があり、APIからデータを取得し、JSON出力を提供します。

私の問題は、リストビューがスムーズにスクロールせず、1秒間ハングしてスクロールし、最後に到達するまで同じことを繰り返すことです.

私はUIスレッドでネットワーク関連の操作を実行しているので、私かもしれないと思っていましたが、ロードが完了した後もそれを続けていますか?

私のカスタムリストビューの構造は

 <TextView  style="@style/photo_post_text"
             android:id="@+id/photo_post_text"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="demotext"
           />


        <ImageView
            android:id="@+id/userimage"
           android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scaleType="fitXY"

            android:adjustViewBounds="true"
           android:src="@drawable/pi" 
           />
4

3 に答える 3

7

写真の読み込みにはAsyncTaskを使用します。UI スレッドでこのようなタスクを実行している限り、スクロールはスムーズではありません。

このチュートリアルをご覧ください。追加のライブラリを必要とせずに、実装する必要があるものを理解するのに役立ちます。また、スクロール中は常に行が再描画されることに注意してください。ロードの実際の「終了」はありません。さらに、ロードした画像を入れることができるConcurrentHashMapを使用して、画像キャッシュを検討することもできます。

于 2013-11-18T17:58:14.283 に答える
3

画像をすばやくロードするには、このライブラリを使用します。画像をロードする方が非常に高速です https://github.com/bumptech/glide

リスト ビュー スクロールをスムーズにするには、strictMode を使用します。IT アクティビティの onCreate() メソッドに書き込みます

protected void onCreate(Bundle savedInstanceState) {

    //StrictMode for smooth list scroll
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    /*----- 
        ListView 
        Custom Adapter set data....
    ------*/}

onCreate() メソッドに追加するその他のことについて

listView.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCoun) {
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
        if (scrollState != 0)
            listView.getAdapter()).isScrolling = true;
        else {
            adapter.isScrolling = false;
            adapter.notifyDataSetChanged();
        }
} });

Adapter クラスに追加する

public static Boolean isScrolling = true;
于 2014-03-21T12:35:25.897 に答える