- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Android实现简单的分批加载ListView由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
每次滑动至底端,从数据库中获取10条数据,并加载于ListView中 。
数据库 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package
com.example.listviewbatchloading;
import
android.content.Context;
import
android.database.sqlite.SQLiteDatabase;
import
android.database.sqlite.SQLiteDatabase.CursorFactory;
import
android.database.sqlite.SQLiteOpenHelper;
public
class
PersonDb
extends
SQLiteOpenHelper {
public
PersonDb(Context context) {
super
(context,
"creature"
,
null
,
1
);
// TODO Auto-generated constructor stub
}
@Override
public
void
onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(
"create table people(_id integer primary key autoincrement,name char,number char)"
);
}
@Override
public
void
onUpgrade(SQLiteDatabase db,
int
oldVersion,
int
newVersion) {
// TODO Auto-generated method stub
db.execSQL(
"drop table people"
);
onCreate(db);
}
}
|
数据库的业务封装,其中获取更多数据的是核心代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
package
com.example.listviewbatchloading;
/**
* 数据库的业务封装类
*/
import
java.util.ArrayList;
import
java.util.List;
import
android.content.ContentValues;
import
android.content.Context;
import
android.database.Cursor;
import
android.database.sqlite.SQLiteDatabase;
public
class
PersonList {
PersonDb personDb;
public
PersonList(Context context){
this
.personDb =
new
PersonDb(context);
}
/**
* 获取一定条目的数据
* @param startIndex
* 开始取数据的位置
* @param num
* 取多少条数据
*/
public
List<Person> getMoreDatas(
int
startIndex,
int
num){
List<Person> list =
new
ArrayList<Person>();
SQLiteDatabase db = personDb.getWritableDatabase();
Cursor cursor = db.rawQuery(
"select name,number from people order by _id desc limit ?,?"
,
new
String[]{startIndex +
""
,num +
""
});
while
(cursor.moveToNext()){
Person person =
new
Person();
person.setName(cursor.getString(cursor.getColumnIndex(
"name"
)));
person.setNumber(cursor.getString(cursor.getColumnIndex(
"number"
)));
list.add(person);
}
cursor.close();
db.close();
return
list;
}
/**
* 添加数据库条目
* @param name
* @param number
*/
public
void
add(String name,String number){
SQLiteDatabase db = personDb.getWritableDatabase();
ContentValues cv =
new
ContentValues();
cv.put(
"name"
, name);
cv.put(
"number"
, number);
db.insert(
"people"
,
null
, cv);
db.close();
}
}
|
功能实现 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
package
com.example.listviewbatchloading;
import
java.util.ArrayList;
import
java.util.List;
import
android.app.Activity;
import
android.os.Bundle;
import
android.os.Handler;
import
android.os.Message;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.AbsListView;
import
android.widget.AbsListView.OnScrollListener;
import
android.widget.BaseAdapter;
import
android.widget.ListView;
import
android.widget.TextView;
import
android.widget.Toast;
public
class
MainActivity
extends
Activity {
private
ListView lv ;
private
List<Person> datas =
new
ArrayList<Person>();
private
static
int
PERPAGE =
10
;
//每页加载数目
private
static
final
int
FINISH =
0
;
//数据加载完成
private
List<Person> moreDatas;
//每次加载的数据
private
MyAdapter adapter;
private
PersonList personList ;
//若数据较多,耗时较长,数据加载完成时,发送FINISH至handler,并通知ListView更新数据
private
Handler handler =
new
Handler(){
public
void
handleMessage(android.os.Message msg) {
switch
(msg.what) {
case
FINISH:
if
(moreDatas.size() !=
0
) {
System.out.println(moreDatas.toString());
adapter.notifyDataSetChanged();
}
else
{
Toast.makeText(MainActivity.
this
,
"没有更多数据"
, Toast.LENGTH_SHORT).show();
}
break
;
default
:
break
;
}
};
};
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initEvent();
}
/**
* 为ListView添加滚动监听事件,但滚动至最后一行时,加载更多数据
*/
private
void
initEvent() {
lv.setOnScrollListener(
new
OnScrollListener() {
@Override
public
void
onScrollStateChanged(AbsListView view,
int
scrollState) {
// TODO Auto-generated method stub
if
(scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
int
lastVisiblePosition = lv.getLastVisiblePosition();
if
(lastVisiblePosition == datas.size() -
1
) {
initData();
System.out.println(
"加载更多数据"
);
}
}
}
@Override
public
void
onScroll(AbsListView view,
int
firstVisibleItem,
int
visibleItemCount,
int
totalItemCount) {
// TODO Auto-generated method stub
}
});
}
private
void
initView() {
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
personList =
new
PersonList(getApplicationContext());
adapter =
new
MyAdapter();
lv.setAdapter(adapter);
}
/**
* 在子线程中加载数据,避免主线程阻塞
*/
private
void
initData() {
new
Thread() {
public
void
run() {
// 加载更多数据
moreDatas = personList.getMoreDatas(datas.size(), PERPAGE);
datas.addAll(moreDatas);
// 把一个容器的所有数据加进来
// 取数据完成,发消息通知取数据完成
handler.obtainMessage(FINISH).sendToTarget();
};
}.start();
}
private
class
ItemView{
private
TextView tv_name;
private
TextView tv_num;
}
/**
* ListView的适配器
* @author lian
*
*/
private
class
MyAdapter
extends
BaseAdapter{
@Override
public
int
getCount() {
// TODO Auto-generated method stub
return
datas.size();
}
@Override
public
Object getItem(
int
position) {
// TODO Auto-generated method stub
return
null
;
}
@Override
public
long
getItemId(
int
position) {
// TODO Auto-generated method stub
return
0
;
}
@Override
public
View getView(
int
position, View convertView, ViewGroup parent) {
ItemView itemView =
null
;
if
(convertView ==
null
) {
itemView =
new
ItemView();
convertView = View.inflate(getApplicationContext(), R.layout.item_lv,
null
);
itemView.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
itemView.tv_num = (TextView) convertView.findViewById(R.id.tv_num);
convertView.setTag(itemView);
}
else
{
itemView = (ItemView) convertView.getTag();
}
Person person = datas.get(position);
itemView.tv_name.setText(person.getName());
itemView.tv_num.setText(person.getNumber());
return
convertView;
}
}
}
|
其他Person的JavaBean,以及布局文件,不在赘述 。
以上就是本文的全部内容,希望对大家的学习有所帮助.
最后此篇关于Android实现简单的分批加载ListView的文章就讲到这里了,如果你想了解更多关于Android实现简单的分批加载ListView的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我之前在论坛上发布过这个,但我想我不太清楚。我有一个侧边栏 ListView 和一个包含我的控件的主面板。我想在 oncreate() 中突出显示 listview 中的 Activity 项,因为每
这里有没有人知道我如何通过 onTap() 扩展 ListView 项(在本例中为卡片)的内容 - 以显示更多选项?您知道那里有可以提供帮助的酒吧吗? 我已经看过了,但我不知道要搜索什么?我相信你们都
我的 ListView 控件有问题。我希望我的奇数行和偶数行具有不同的颜色,但我想通过代码而不是 FXML 来实现。例如: 第一行 - 绿色 第二行 - 红色 第三行 - 绿色 第四行 - 红色 现在
我有一个 ListView 。我想让单元格背景透明。目前,我正在做以下事情: .list-cell { -fx-background-color: transparent; } 但是,细胞的颜
我想创建一个几乎无限的元素列表,但我想将列表的初始位置设置为某个特定元素。像这张图片: 其中索引 0 将是初始位置,并且此列表可能会也可能不会在两个方向上延伸很长。 我可以像这样创建我的元素: W
有没有办法在JavaFX中获取ListView的可见项?我想确定 JavaFX 应用程序中 ListView 显示的第一个可见项。 以下代码found here不适合我(仅适用于 TableView)
开发人员。 我尝试在水平方向拉伸(stretch) ListView 项目。我确实重置了 ItemContainerStyle ,并且水平对齐是拉伸(stretch)的。这是 MainPage.xam
有没有办法在JavaFX中获取ListView的可见项?我想确定 JavaFX 应用程序中 ListView 显示的第一个可见项。 以下代码found here不适合我(仅适用于 TableView)
我想问一下: 我有一个预定义顺序的数组。 var order=new Array(); order[0]="Tesco"; order[1]="Interspar"; order[2]="
我希望创建以下内容:当到达内部 Listview 的顶部或底部时,我想继续在顶部 Listview 中滚动。见动图: Gif of what I got so far 一个选项是在到达底部时将内部 L
我正在尝试在 ajax 发布后刷新 jQuery 移动 ListView ,我一直在尝试使用 .trigger("create") 来执行此操作,如下所示: Most Played
我真的不明白是什么导致了错误我检查了文档,这里有一个非常相似的例子是我的 views.py,我使用的应用程序下的 urls.py 包含,以及模板 View .py class SchoolListVi
我有这个父布局 parent_listview 的列表项具有这种布局 child_listview 的项目有这个布局
我在单击列表项时获取 listview 项 时遇到问题。我得到了 simple listview(Arrayadapter) 的 listview item,但我遇到了 custom listview
我有一个工作正常的 DropdownMenu,但我需要一个 ListView,但我无法转换它。 DropdownMenu 如下所示: // Create the List of devices t
我想实现一个可滚动(垂直)且其中包含元素的屏幕。所以我把它放在 listview.builder 上。问题是,其中一个元素是另一个水平滚动的 listview.builder。当我实现它时,horiz
帮助!我想不通! 为了帮助我学习 SwiftUI,我正在使用 ListView 制作一个简单的杂货 list 应用程序。点击列表中的每个项目时,有些按钮会变成绿色或红色。 在我向列表数组中添加太多项目
所以我知道我们可以等待 ListView 加载,然后显示它。但是,如果我们动态加载正在下载的图像,ListView 将加载但图像尚未加载,因此它们不会出现在 ListView 中。 可接受的等待 Li
我是 Android 的新手,正在努力提高编程技能。 在这里,我有自定义 ListView 适配器类,我曾在其中显示 ListView 项目,如 TextView 、图像等。 我需要做的是,我在 Li
So, what I want is to individually disable a button for the concerned item in the ListView when clic
我是一名优秀的程序员,十分优秀!