Android 在listview中向下滚动时,从数据库SQLite中提取更多数据

Android 在listview中向下滚动时,从数据库SQLite中提取更多数据,android,listview,Android,Listview,如何在scroll botton中的listview中提取更多数据。 这是我的代码: DatabaseHandler database; ListView mylist; ArrayList<NewsItem> items; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

如何在scroll botton中的listview中提取更多数据。 这是我的代码:

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数据库;
列表视图mylist;
数组列表项;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(右布局。类别,容器,假);
mylist=(ListView)view.findViewById(R.id.categoryNewsItemGrid);
mylist.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//在单击的索引处检索新闻项
NewsItem=(NewsItem)mylist.getAdapter().getItem(位置);
//查看项目
clickHandler.onItemClick(item.getId());
}
});
mylist.setOnScrollListener(新的OnScrollListener(){
CrollStateChanged上的公共无效(AbsListView列表,int状态){
if(state==OnScrollListener.SCROLL\u state\u IDLE){
//检查是否所有可见项目都有图像
int firstVisible=list.getFirstVisiblePosition();
int lastVisible=list.getLastVisiblePosition();

对于(int i=firstVisible;i你必须打开你的数据库,然后在每个滚动条上查询数据库,并将结果限制在你想要的数量!因此,你的应用程序第一次打开时,你将拉动,比方说10行,然后在滚动条之后,你将查询数据库并拉动更多的下一个10行

更新

让我们简化一下!使用您的数据类型创建一个ArrayList!并创建一个私有int limitCounter=0;。然后从数据库获取所有数据并将其插入ArrayList。然后,当您滚动时,您将更改limitCounter的值并从中提取相应的数据,这样您就不必查询数据了每次都是这样

更新#2


试试下面的教程,它会帮助你:

你必须打开你的数据库,然后在每次滚动时查询数据库,并将结果限制在你想要的数量!所以你的应用程序第一次打开时,你将拉动,比方说10行,然后在滚动后,你将查询数据库并拉动更多的下一个10行

更新

让我们简化一下!使用您的数据类型创建一个ArrayList!并创建一个私有int limitCounter=0;。然后从数据库获取所有数据并将其插入ArrayList。然后,当您滚动时,您将更改limitCounter的值并从中提取相应的数据,这样您就不必查询数据了每次都是这样

更新#2


请尝试以下教程,它将对您有所帮助:

您必须打开数据库,然后在onScroll()中,如果您到达end,请查询数据库以获取接下来的10项并附加到适配器并调用notifyDataSetChanged()在适配器上。因此,第一次打开应用程序时,您将拉动,比方说10行,然后滚动后,您将查询数据库并拉动更多的下10行。请检查下面的示例代码

public class GrowingListViewActivity extends ListActivity implements OnScrollListener  {
Aleph0 adapter = new Aleph0();

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setListAdapter(adapter);
    getListView().setOnScrollListener(this);
}

public void onScroll(AbsListView view, int firstVisible, int visibleCount,
        int totalCount) {

    boolean loadMore = /* maybe add a padding */
    firstVisible + visibleCount >= totalCount;

    if (loadMore) {
        adapter.count += visibleCount; // or any other amount
        adapter.notifyDataSetChanged();
    }
}

public void onScrollStateChanged(AbsListView v, int s) {
}

class Aleph0 extends BaseAdapter {

    int count = 40; /* starting amount */

    public int getCount() {
        return count;
    }

    public Object getItem(int pos) {
        return pos;
    }

    public long getItemId(int pos) {
        return pos;
    }

    public View getView(int pos, View v, ViewGroup p) {
        TextView view = new TextView(GrowingListViewActivity.this);
        view.setText("entry View : " + pos);
        return view;
    }
}
 }


  public class CustomArrayAdapter extends ArrayAdapter implements
    OnScrollListener {
private final Context context;
private final ArrayList<String> values;

static class ViewHolder {
    public TextView text;
    public ImageView image;
}

public CustomArrayAdapter(Context arg0, int arg1, int arg2,
        ArrayList<String> arg3) {
    super(arg0, arg1, arg2, arg3);
    this.context = arg0;
    this.values = arg3;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    int product_id = 0;
    View rowView = new View(context);
    try {

        ImageView wic_logo = new ImageView(context);
        TextView label = new TextView(context);

        String p = values.get(position);

        label.setText(p);

        wic_logo.setImageResource(R.drawable.ic_launcher);

        Log.d("Custom Array Adapter", "at" + position);
    } catch (Exception e) {
        Log.d("Custom Array Adapter", "catch");
    }

    return rowView;
}

public void onScroll(AbsListView arg0, int firstVisibleItem,
        int visibleItemCount, int totalItemCount) {
    Log.d("entered onScroll", " " + firstVisibleItem + visibleItemCount
            + totalItemCount);
    if (((firstVisibleItem + visibleItemCount) >= totalItemCount - 1)) {
        Log.d("entered if", " " + firstVisibleItem + visibleItemCount
                + totalItemCount);
        // if we're at the bottom of the listview, load more data
        addData(totalItemCount, totalItemCount); // values.get(totalItemCount));
    }
}

private void addData(int totalItemCount, int productId) {

    Toast.makeText(getContext(), "last item", Toast.LENGTH_SHORT).show();
}

public void onScrollStateChanged(AbsListView arg0, int arg1) {

}

  }
公共类GrowingListViewActivity扩展ListActivity在CrollListener上实现{
Aleph0适配器=新的Aleph0();
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setListAdapter(适配器);
getListView().setOnScrollListener(此);
}
public void onScroll(AbsListView视图、int firstVisible、int visibleCount、,
整数(总计数){
boolean loadMore=/*可能会添加一个填充*/
firstVisible+visibleCount>=totalCount;
如果(加载更多){
adapter.count+=visibleCount;//或任何其他金额
adapter.notifyDataSetChanged();
}
}
CrollStateChanged上的公共无效(AbsListView v,int s){
}
类Aleph0扩展了BaseAdapter{
整数计数=40;/*起始金额*/
public int getCount(){
返回计数;
}
公共对象getItem(int-pos){
返回pos;
}
公共长getItemId(int-pos){
返回pos;
}
公共视图getView(内部位置、视图v、视图组p){
TextView视图=新的TextView(GrowingListViewActivity.this);
view.setText(“入口视图:+pos”);
返回视图;
}
}
}
公共类CustomArrayAdapter扩展了ArrayAdapter实现
OnScrollListener{
私人最终语境;
私有最终ArrayList值;
静态类视窗夹{
公共文本查看文本;
公众形象;
}
公共CustomArrayAdapter(上下文arg0、int arg1、int arg2、,
ArrayList arg3){
超级(arg0、arg1、arg2、arg3);
this.context=arg0;
这个值=arg3;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
int product_id=0;
视图行视图=新视图(上下文);
试一试{
ImageView wic_徽标=新ImageView(上下文);
TextView标签=新的TextView(上下文);
字符串p=value.get(位置);
label.setText(p);
wic_logo.setImageResource(R.drawable.ic_启动器);
Log.d(“自定义阵列适配器”,“位于”+位置);
}捕获(例外e){
Log.d(“自定义阵列适配器”、“捕获”);
}
返回行视图;
}
public void onScroll(AbsListView arg0,int firstVisibleItem,
int visibleItemCount,int totalItemCount){
Log.d(“输入onScroll”,“”+firstVisibleItem+visibleItemCount
+总项目数);
如果(((firstVisibleItem+visibleItemCount)>=totalItemCount-1)){
Log.d(“如果输入,”“+firstVisibleItem+visibleItemCount
+总项目数);
//如果我们在listview的底部,请加载更多数据
addData(totalItemCount,totalItemCount);//values.g
public class GrowingListViewActivity extends ListActivity implements OnScrollListener  {
Aleph0 adapter = new Aleph0();

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setListAdapter(adapter);
    getListView().setOnScrollListener(this);
}

public void onScroll(AbsListView view, int firstVisible, int visibleCount,
        int totalCount) {

    boolean loadMore = /* maybe add a padding */
    firstVisible + visibleCount >= totalCount;

    if (loadMore) {
        adapter.count += visibleCount; // or any other amount
        adapter.notifyDataSetChanged();
    }
}

public void onScrollStateChanged(AbsListView v, int s) {
}

class Aleph0 extends BaseAdapter {

    int count = 40; /* starting amount */

    public int getCount() {
        return count;
    }

    public Object getItem(int pos) {
        return pos;
    }

    public long getItemId(int pos) {
        return pos;
    }

    public View getView(int pos, View v, ViewGroup p) {
        TextView view = new TextView(GrowingListViewActivity.this);
        view.setText("entry View : " + pos);
        return view;
    }
}
 }


  public class CustomArrayAdapter extends ArrayAdapter implements
    OnScrollListener {
private final Context context;
private final ArrayList<String> values;

static class ViewHolder {
    public TextView text;
    public ImageView image;
}

public CustomArrayAdapter(Context arg0, int arg1, int arg2,
        ArrayList<String> arg3) {
    super(arg0, arg1, arg2, arg3);
    this.context = arg0;
    this.values = arg3;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    int product_id = 0;
    View rowView = new View(context);
    try {

        ImageView wic_logo = new ImageView(context);
        TextView label = new TextView(context);

        String p = values.get(position);

        label.setText(p);

        wic_logo.setImageResource(R.drawable.ic_launcher);

        Log.d("Custom Array Adapter", "at" + position);
    } catch (Exception e) {
        Log.d("Custom Array Adapter", "catch");
    }

    return rowView;
}

public void onScroll(AbsListView arg0, int firstVisibleItem,
        int visibleItemCount, int totalItemCount) {
    Log.d("entered onScroll", " " + firstVisibleItem + visibleItemCount
            + totalItemCount);
    if (((firstVisibleItem + visibleItemCount) >= totalItemCount - 1)) {
        Log.d("entered if", " " + firstVisibleItem + visibleItemCount
                + totalItemCount);
        // if we're at the bottom of the listview, load more data
        addData(totalItemCount, totalItemCount); // values.get(totalItemCount));
    }
}

private void addData(int totalItemCount, int productId) {

    Toast.makeText(getContext(), "last item", Toast.LENGTH_SHORT).show();
}

public void onScrollStateChanged(AbsListView arg0, int arg1) {

}

  }