2

ユーザーがアプリを起動したときに自分の部分を分割してListViewその一部だけを表示し、ユーザーが[さらにアイテムを読み込む]というボタンを押したときに他の部分を表示するにはどうすればよいのでしょうか。

私は500を超えるアイテムの大きなリストを持っており、高速にロードできるようにそれをパーツに分割することを考えています。

下部にさらにメールを読み込むオプションを提供する他のメールアプリと同様の機能が必要です。

誰かが私の問題のサンプルコードを持っているなら、他の人と共有してください。ちょっとしたガイダンスもいただければ幸いです。

4

3 に答える 3

3

あなたの質問から、ユーザーが[さらにアイテムをロード]ボタンをクリックするたびに、最初はいくつかのアイテムをロードし、その後はさらにアイテムをロードしたいと思われます。

そのためには、次の2つのケースが考えられます。

  1. 最初のケース: Webサービスは、最初に20個のアイテムを送信し、次回はユーザーが[さらにアイテムを読み込む]ボタンをクリックするたびに20個のアイテムを送信するなど、部分的に応答を送信できます。

  2. 2番目のケース:応答で500アイテムを取得した場合、「さらにアイテムをロード」のような機能を実装するには、すべてのアイテムを格納するデータベーステーブルを作成する必要があります。データベース値の保存が完了したら、最初に20個のアイテムをフェッチし、次に20個のアイテムをロードします。

于 2011-06-16T09:21:04.713 に答える
3

ボタンをうまく実装するのは簡単です。

onCreateで、最初の50個のアイテムをアダプターにロードしてから、次の50個などを追加するonClickListenerを使用してボタンを実装します。

ただし、本当にやりたいことは、リストビューを遅延ロードしてスクロールすると、より多くのアイテムが読み込まれるようにすることだと思います。そのため、余分なボタンでUIを乱雑にする必要はありません。

このため、listactivityはOnScrollListenerを実装する必要があります

その一例を次に示します。Androidエンドレスリスト

于 2011-06-16T09:26:14.900 に答える
0

最初に、リストビューにデータの一部をロードします。の概念を使用する必要がありHandlerます。onclickイベントハンドラー内のハンドラーにメッセージを送信する必要があります完全なデータをロードしてnotifydataSetChangedメソッドを呼び出すロジックを作成する必要があります

以下のサンプルコードをご覧ください。最初に、ユーザーはリストの一部を見ることができます。ユーザーがリストアイテムをcvlickすると、リストユーザーはリストビュー全体を見ることができます。それはあなたが期待しているものと似ています。

サンプルコード

import java.util.ArrayList;

import android.app.ListActivity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MyListView extends ListActivity {
    ArrayList<String> pens = new ArrayList<String>();
    ArrayAdapter arrayAdapter = null;
    private static final byte UPDATE_LIST = 100;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        pens.add("MONT Blanc");
        pens.add("Gucci");
        pens.add("Parker");

        arrayAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, pens);
        setListAdapter(arrayAdapter);

        getListView().setTextFilterEnabled(true);
        ListView lv = getListView();

        lv.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                System.out.println("..Item is clicked..");
                Message msg = new Message();
                msg.what = UPDATE_LIST;
                updateListHandler.sendMessage(msg);
            }
        });



        // System.out.println("....g1..."+PhoneNumberUtils.isGlobalPhoneNumber("+912012185234"));
        // System.out.println("....g2..."+PhoneNumberUtils.isGlobalPhoneNumber("120121852f4"));

    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub

        super.onConfigurationChanged(newConfig);
        System.out.println("...11configuration is changed...");
    }

    void addMoreDataToList() {
        pens.add("item1");
        pens.add("item2");
        pens.add("item3");

    }

    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Object o = this.getListAdapter().getItem(position);
        String pen = o.toString();
        Toast.makeText(this, id + "You have chosen the pen: " + " " + pen,
                Toast.LENGTH_LONG).show();
    }

    private Handler updateListHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case UPDATE_LIST:
                addMoreDataToList();
                arrayAdapter.notifyDataSetChanged();
                break;

            }
            ;
        };
    };




}

ありがとうDeepak

于 2011-06-16T09:27:36.337 に答える