android ListView分頁處理

public class Paging extends Activity implements OnScrollListener
{
   
    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;
}


發佈了45 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章