package
com.ScrollListView;
import
android.app.ListActivity;
import
android.os.Bundle;
import
android.view.Gravity;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.AbsListView;
import
android.widget.BaseAdapter;
import
android.widget.LinearLayout;
import
android.widget.ProgressBar;
import
android.widget.TextView;
import
android.widget.AbsListView.OnScrollListener;
public
class
EndLessActivity
extends
ListActivity
implements
OnScrollListener{
Aleph0adapter
=
new
Aleph0();
int
mProgressStatus
=
0
;
ProgressBarprogressBar;
protected
void
onCreate(BundlesavedInstanceState){
super
.onCreate(savedInstanceState);
LinearLayoutsearchLayout
=
new
LinearLayout(
this
);
searchLayout.setOrientation(LinearLayout.HORIZONTAL);
progressBar
=
new
ProgressBar(
this
);
progressBar.setPadding(
0
,
0
,
15
,
0
);
searchLayout.addView(progressBar,
new
LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
));
TextViewtextView
=
new
TextView(
this
);
textView.setText(
"
加载中...
"
);
textView.setGravity(Gravity.CENTER_VERTICAL);
searchLayout.addView(textView,
new
LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT
));
searchLayout.setGravity(Gravity.CENTER);
LinearLayoutloadingLayout
=
new
LinearLayout(
this
);
loadingLayout.addView(searchLayout,
new
LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
));
loadingLayout.setGravity(Gravity.CENTER);
getListView().addFooterView(loadingLayout);
setListAdapter(adapter);
getListView().setOnScrollListener(
this
);
}
public
void
onScroll(AbsListViewview,
int
firstVisible,
int
visibleCount,
int
totalCount){
boolean
loadMore
=
/*
maybeaddapadding
*/
firstVisible
+
visibleCount
>=
totalCount;
if
(loadMore){
adapter.count
+=
visibleCount;
//
oranyotheramount
adapter.notifyDataSetChanged();
}
}
public
void
onScrollStateChanged(AbsListViewv,
int
s){}
class
Aleph0
extends
BaseAdapter{
int
count
=
40
;
/*
startingamount
*/
public
int
getCount(){
return
count;}
public
ObjectgetItem(
int
pos){
return
pos;}
public
long
getItemId(
int
pos){
return
pos;}
public
ViewgetView(
int
pos,Viewv,ViewGroupp){
TextViewview
=
new
TextView(EndLessActivity.
this
);
view.setText(
"
entry
"
+
pos);
return
view;
}
}
}
listview下部是按钮控制:
package
com.ScrollListView;
import
android.app.ListActivity;
import
android.os.Bundle;
import
android.view.Gravity;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.AbsListView;
import
android.widget.BaseAdapter;
import
android.widget.Button;
import
android.widget.LinearLayout;
import
android.widget.ProgressBar;
import
android.widget.TextView;
import
android.widget.AbsListView.OnScrollListener;
public
class
EndLessActivity
extends
ListActivity{
Aleph0adapter
=
new
Aleph0();
int
mProgressStatus
=
0
;
protected
void
onCreate(BundlesavedInstanceState){
super
.onCreate(savedInstanceState);
LinearLayoutsearchLayout
=
new
LinearLayout(
this
);
searchLayout.setOrientation(LinearLayout.HORIZONTAL);
ButtontextView
=
new
Button(
this
);
textView.setText(
"
加载中...
"
);
textView.setGravity(Gravity.CENTER_VERTICAL);
searchLayout.addView(textView,
new
LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT
));
searchLayout.setGravity(Gravity.CENTER);
LinearLayoutloadingLayout
=
new
LinearLayout(
this
);
loadingLayout.addView(searchLayout,
new
LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
));
loadingLayout.setGravity(Gravity.CENTER);
getListView().addFooterView(loadingLayout);
textView.setOnClickListener(
new
Button.OnClickListener()
{@Override
public
void
onClick(Viewv)
{
adapter.count
+=
10
;
adapter.notifyDataSetChanged();
}
});
setListAdapter(adapter);
//
getListView().setOnScrollListener(this);
}
/*
publicvoidonScroll(AbsListViewview,
intfirstVisible,intvisibleCount,inttotalCount){
booleanloadMore=
firstVisible+visibleCount>=totalCount;
if(loadMore){
adapter.count+=visibleCount;
adapter.notifyDataSetChanged();
}
}
*/
public
void
onScrollStateChanged(AbsListViewv,
int
s){}
class
Aleph0
extends
BaseAdapter{
int
count
=
40
;
/*
startingamount
*/
public
int
getCount(){
return
count;}
public
ObjectgetItem(
int
pos){
return
pos;}
public
long
getItemId(
int
pos){
return
pos;}
public
ViewgetView(
int
pos,Viewv,ViewGroupp){
TextViewview
=
new
TextView(EndLessActivity.
this
);
view.setText(
"
entry
"
+
pos);
return
view;
}
}
}
本文介绍了一种在Android应用中实现无限滚动列表的方法。通过自定义Adapter并结合使用OnScrollListener监听滚动状态,实现在接近列表底部时自动加载更多数据的功能。同时提供了一个使用按钮手动触发加载更多的替代方案。
100

被折叠的 条评论
为什么被折叠?



