Android 在listview中向下滚动时,从数据库SQLite中提取更多数据
如何在scroll botton中的listview中提取更多数据。 这是我的代码: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) {
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) {
}
}