{
private ListView items_list;
/*
* 最後可視索引
*/
private int last_index = 0;
/*
* 一頁顯示條數
*/
private int items_count = 10;
/*
* 數據總長度
*/
private int data_size = 40;
/*
* ListView 適配器引用對象
*/
private PaginationAdapter paging_adapter;
private View load_more_view;
private Button load_more_item;
private Handler handler = new Handler();
private int DELAY_TIME = 2000;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
load_more_view = getLayoutInflater().inflate(R.layout.loadmore, null);
/*
* dispose Load Items
*/
disposeLoadItems();
items_list = (ListView)findViewById(R.id.lvNews);
items_list.addFooterView(load_more_view);
initializeAdapter();
items_list.setAdapter(paging_adapter);
items_list.setOnScrollListener(this);
}
/**
*
* @param
* @return void
* @throws
* @since TianTian
*/
public void onScrollStateChanged(AbsListView view, int scrollState)
{
int itemsLastIndex = paging_adapter.getCount()-1; //數據集最後一項的索引
int lastIndex = itemsLastIndex + 1;
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE && last_index == lastIndex)
{
// 如果是自動加載,可以在這裏放置異步加載數據的代碼
Log.v("-----------", "-------------------");
load_more_item = (Button)load_more_view.findViewById(R.id.loadMoreButton);
load_more_item.setText("正在加載中...");
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
loadMoreData();
paging_adapter.notifyDataSetChanged();
load_more_item.setText("查看更多..."); //恢復按鈕文字
}
},DELAY_TIME);
paging_adapter.notifyDataSetChanged();
}
}
/**
*
* @param
* @return void
* @throws
* @since TianTian
*/
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount)
{
this.items_count = visibleItemCount;
last_index = firstVisibleItem + visibleItemCount - 1;
Log.e("========================= ","========================");
Log.e("items_count = ",items_count+"");
Log.e("firstVisibleItem = ",firstVisibleItem+"");
Log.e("visibleItemCount = ",visibleItemCount+"");
Log.e("totalItemCount = ",totalItemCount+"");
Log.e("========================= ","========================");
//如果所有的記錄選項等於數據集的條數,則移除列表底部視圖
if(totalItemCount == data_size + 1)
{
items_list.removeFooterView(load_more_view);
Toast.makeText(this, "數據全部加載完!", Toast.LENGTH_LONG).show();
}
}
private void initializeAdapter()
{
List<News> news = new ArrayList<News>();
for(int i = 1; i <= 10; i++)
{
News items = new News();
items.setTitle("Title"+i);
items.setContent("This is News Content"+i);
news.add(items);
}
paging_adapter = new PaginationAdapter(news);
}
private void disposeLoadItems()
{
load_more_item = (Button)load_more_view.findViewById(R.id.loadMoreButton);
load_more_item.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View view)
{
load_more_item.setText("正在加載中...");
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
loadMoreData();
paging_adapter.notifyDataSetChanged();
load_more_item.setText("查看更多..."); //恢復按鈕文字
}
},DELAY_TIME);
}
});
}
private void loadMoreData()
{
int count = paging_adapter.getCount();
if(count+10 <= data_size)
{
for(int i=count+1; i<=count+10; i++)
{
News item = new News();
item.setTitle("Title"+i);
item.setContent("This is News Content"+i);
paging_adapter.addNewsItem(item);
}
}
else
{
for(int i = count+1; i <= data_size; i++){
News item = new News();
item.setTitle("Title"+i);
item.setContent("This is News Content"+i);
paging_adapter.addNewsItem(item);
}
}
}
class PaginationAdapter extends BaseAdapter
{
List<News> newsItems;
public PaginationAdapter(List<News> newsitems){
this.newsItems = newsitems;
}
@Override
public int getCount() {
return newsItems.size();
}
@Override
public Object getItem(int position) {
return newsItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent)
{
if(view == null)
{
view = getLayoutInflater().inflate(R.layout.list_items, null);
}
TextView tvTitle = (TextView)view.findViewById(R.id.newstitle);
tvTitle.setText(newsItems.get(position).getTitle());
TextView tvContent = (TextView)view.findViewById(R.id.newscontent);
tvContent.setText(newsItems.get(position).getContent());
return view;
}
public void addNewsItem(News newsitem){
newsItems.add(newsitem);
}
}
}
xml:list_items.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<TextView android:id="@+id/newstitle" android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView android:id="@+id/newscontent" android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
loadmore.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<Button android:id="@+id/loadMoreButton" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="查看更多..." />
</LinearLayout>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<ListView android:id="@+id/lvNews" android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
model:News
public class News
{
/*
* 新聞標題
*/
private String title;
/*
* 新聞內容
*/
private String content;
}