0

スクロールリストビューを使用すると、本当にバグがあるようです。すべてのデータ (すべてのネットワーク呼び出しを含む) を準備するリストビュー アダプターがあり、リストビュー アダプターにデータを入力します。

スクロールはスムーズではなく、ほとんどの場合、ScrollView 内に ListView を実装すると機能しません。

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <ListView
        android:id="@+id/rideList"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/customersTitle"
        android:background="@drawable/roundcornersgreyback"
        android:scrollbarSize="3dp"
        android:scrollbarStyle="outsideOverlay"
        android:scrollbars="vertical"
        android:scrollingCache="true"
        android:smoothScrollbar="true"
        android:visibility="visible" />
</ScrollView>

ScrollView なしでスクロールすると、ListView 自体の属性を使用するだけで、リストはスクロールしますが、レイアウトの下部に失われた部分があります。フッターは非表示です。

<ListView
    android:id="@+id/rideList"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/customersTitle"
    android:background="@drawable/roundcornersgreyback"
    android:scrollbarSize="3dp"
    android:scrollbarStyle="outsideOverlay"
    android:scrollbars="vertical"
    android:scrollingCache="true"
    android:smoothScrollbar="true"
    android:visibility="visible" />

ScrollView をレイアウトのルートに取得すると、リスト ビューはまったくスクロールできません。

私は何を間違っていますか?リストとビューをスクロールする必要があるのはクレイジーですか?

編集:コードはviewHolderレイアウトに従っています。

4

3 に答える 3

3

私が理解していることから、実装が遅れる原因として少なくとも 2 つの問題があります。

何よりもまず、ScrollView 内で ListView を使用していますが、これは良い考えではありません。ScrollViewの API ドキュメントから:

ListView は独自の垂直スクロールを処理するため、ListView で ScrollView を使用しないでください。最も重要なことは、これを行うと、大きなリストを処理するための ListView の重要な最適化がすべて無効になります。これは、ListView がアイテムのリスト全体を効果的に表示して、ScrollView によって提供される無限のコンテナーを埋めるためです。

次に、ListView をスムーズにスクロールさせたい場合は、リスト要素ごとに新しいビューを作成するのではなく、ViewHolder パターンを実装するアダプターを使用してビューをリサイクルする必要があります。「ListView ViewHolder」のようなものを検索するだけで、優れたチュートリアルが得られます。

于 2013-03-12T08:47:44.607 に答える
2

フッターレイアウトとしてのリストビューフッターの使用

  View footerView =  ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false);
        list.addFooterView(footerView);

http://developer.android.com/reference/android/widget/ListView.html

于 2013-03-12T08:47:51.940 に答える
2

Google 開発者によるリストビューの世界。リンクを見てください。ビューホルダーの使用と、それによってパフォーマンスが向上する理由について説明します。カスタム リスト アダプターで ViewHolder を使用します。ビューをリサイクルすると、スクロールがスムーズになります。画面に表示されているこれらのビューはリサイクルできません。

毎回 findViewById() を呼び出しています。したがって、リストが増えるとパフォーマンスが低下します。したがって、ビューのリサイクルは、リストビューのパフォーマンスを向上させる方法です。

このリンクhttp://www.vogella.com/articles/AndroidListView/article.htmlにはチュートリアルがあり、見出し VIEWHOLDER PATTERN の下にある ViewHolder を理解するのに役立ちます。

static class ViewHolder {
TextView text;
}

ViewHolder holder = new ViewHolder();
if(convertView==null)
{
 holder.text = (TextView) convertView.findViewById(R.id.listitem_text);
 convertView.setTag(viewHolder);
}
holder = (ViewHolder) rowView.getTag();
holder.text.setText("hello);
于 2013-03-12T09:11:48.570 に答える