スクロールボタンのリストビューの場合、より多くのデータを取得する方法。これは私のコードです:
DatabaseHandler database;
ListView mylist;
ArrayList<NewsItem> items;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.category, container, false);
mylist = (ListView) view.findViewById(R.id.categoryNewsItemGrid);
mylist.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// retrieve the NewsItem at the index of the click
NewsItem item = (NewsItem) mylist.getAdapter().getItem(position);
// view the item
clickHandler.onItemClick(item.getId());
}
});
mylist.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView list, int state) {
if (state == OnScrollListener.SCROLL_STATE_IDLE) {
// check to see if all the visible items have images
int firstVisible = list.getFirstVisiblePosition();
int lastVisible = list.getLastVisiblePosition();
for (int i = firstVisible; i <= lastVisible; i++) {
NewsItem item = (NewsItem) list.getAdapter().getItem(i);
// if this item doesn't have a thumbnail
if (item.getThumbnailBytes() == null) {
// load the thumbnail
Bundle bundle = new Bundle();
bundle.putInt(ResourceService.KEY_ITEM_ID,
item.getId());
service.sendMessageToService(
ResourceService.MSG_LOAD_THUMB, bundle);
}
}
}
}
public void onScroll(AbsListView list, int firstVisible,
int visibleItems, int totalItems) {
if (visibleItems != 0
&& ((firstVisible + visibleItems) >= (totalItems))) {
Log.d("MyLog", "count: "+totalItems);
}
}
});
displayCategory(getArguments().getString("category"));
return view;
}
public void displayCategory(String categoryTitle) {
items = new ArrayList<NewsItem>(Arrays.asList(database.getItems(
categoryTitle, 10)));
mylist.setAdapter(new ItemAdapter(getActivity(), R.layout.list_news_item,
items, 70, 70));
}
ファイル DatabaseHandler.java 内のデータベースへの関数クエリ
public NewsItem[] getItems(String category, int limit) {
// ask the content provider for the items
Uri uri = Uri.withAppendedPath(
DatabaseProvider.CONTENT_URI_ITEMS_BY_CATEGORY, category);
String[] projection = new String[] { DatabaseHelper.COLUMN_ITEM_ID,
DatabaseHelper.COLUMN_ITEM_TITLE,
DatabaseHelper.COLUMN_ITEM_DESCRIPTION,
DatabaseHelper.COLUMN_ITEM_URL,
DatabaseHelper.COLUMN_ITEM_THUMBNAIL };
String sortOrder = DatabaseHelper.RELATIONSHIP_TABLE + "."
+ DatabaseHelper.COLUMN_RELATIONSHIP_PRIORITY + " ASC, "
+ DatabaseHelper.ITEM_TABLE + "."
+ DatabaseHelper.COLUMN_ITEM_PUBDATE + " DESC";
Cursor cursor = contentResolver.query(uri, projection, null, null,
sortOrder);
// check the cursor isn't null
if (cursor == null) {
// bail here, returning an empty array
return new NewsItem[0];
}
// load the column names
int id = cursor.getColumnIndex(DatabaseHelper.COLUMN_ITEM_ID);
int title = cursor.getColumnIndex(DatabaseHelper.COLUMN_ITEM_TITLE);
int description = cursor
.getColumnIndex(DatabaseHelper.COLUMN_ITEM_DESCRIPTION);
int url = cursor.getColumnIndex(DatabaseHelper.COLUMN_ITEM_URL);
int thumbnail = cursor
.getColumnIndex(DatabaseHelper.COLUMN_ITEM_THUMBNAIL);
// load the items into an array
ArrayList<NewsItem> items = new ArrayList<NewsItem>();
while (cursor.moveToNext() && cursor.getPosition() < limit) {
NewsItem item = new NewsItem(); // initialize a new item
item.setId(cursor.getInt(id));
item.setTitle(cursor.getString(title));
item.setDescription(cursor.getString(description));
item.setUrl(cursor.getString(url));
item.setThumbnailBytes(cursor.getBlob(thumbnail));
items.add(item); // add this item to the array
}
cursor.close();
return items.toArray(new NewsItem[items.size()]);
}
Log.d("MyLog", "count: "+totalItems); を使用して logcat を表示した場合 最初にリストビューを表示するときに 10 に設定したため、count: 10を取得します。
私の質問は、データベースで+30行のデータまであるため、下にスクロールしたときにリストビューにさらにデータ行をロードする方法です。インターネットでチュートリアルを見ましたが、成功しませんでした。多分ここで、私の問題を解決しました。
ありがとう。