リストビューを複数の部品に分割してロードする方法は?
質問
どうすれば自分を分割できるのだろうと思っています ListView
ユーザーがアプリを起動し、ユーザーが「より多くのアイテムを読み込む」というボタンを押すと、ユーザーがアプリを起動して他の部分を表示したときに、その一部のみを表示します。
私は500を超えるアイテムの大きなリストを持っており、それを速く読み込むことができるようにそれを部品に分割することを考えています。
より多くの電子メールをロードするために下部にオプションを提供する任意の電子メールアプリに似た機能が必要です。
誰かが私の問題のサンプルコードを持っている場合は、他の人を共有してください。少しのガイダンスも大歓迎です。
解決
ボタンをよく実装するのは簡単です:
OnCreateでは、アダプターを1番目の50アイテムにロードし、次の50などを追加するOnClickListenerでボタンを実装します。
しかし、あなたが本当にやりたいのは、lazy load load load load load load load listViewなので、より多くのアイテムをロードすることです。
このため、ListActivityはOnScrollListenerを実装する必要があります
その例は次のとおりです。 Android Endlessリスト
他のヒント
質問から、最初にいくつかのアイテムをロードしてから、ユーザーが[その他のアイテムを読み込む]ボタンをクリックするたびに、将来、より多くのアイテムをロードしたいようです。
そのためには、可能な2つのケースがあります。
最初のケース: WebServiceは、初めて20個のアイテムを送信するなど、部品に応答を送信できます。次回は、ユーザーが[その他のアイテムを読み込む]ボタンをクリックするたびに20個のアイテムを送信できます。
2番目のケース: それに応じて500個のアイテムを取得した場合、「より多くのアイテムをロードする」種類の機能を実装するには、すべてのアイテムを保存するにはデータベーステーブルを作成する必要があります。データベース値の保存が完了したら、最初に20個のアイテムをフェッチし、次回は20個のアイテムをロードします。
最初にリストビューにデータの一部をロードします。の概念を使用する必要があります Handler
. 。オンクリックイベントハンドラー内のハンドラーにメッセージを送信する必要があります。完全なデータをロードして呼び出すためにロジックを記述する必要があります notifydataSetChanged
方法
以下のサンプルコードをご覧ください。最初にユーザーはリストの一部を見ることができます。リストアイテムのユーザーcvlicksの場合、リストユーザーはリスト全体を表示できます。それはあなたが期待しているものと同じです。
サンプルコード
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に感謝します