Android XListView下拉重新整理和上拉載入更多_Android

來源:互聯網
上載者:User

市面上有好多的類比ListView重新整理資料的開源架構,如:v4包內建的SwipeRefreshLayout ,以及集ListView、GridView甚至WebView於一身的Pulltorefresh等等。前述的兩個開源架構目前使用也算頻繁。有興趣的讀者可以自行搜尋,當然有時間一定回來對所有的使用方式做一個匯總和比較。今天介紹的這款架構,專門針對ListView做下拉重新整理與上拉載入的,如果單單是ListView就顯得更加簡單方便易於理解。
1、首先引入xListView_lib庫到自己的Demo上
2、使用步驟
它的使用步驟跟普通的ListView是一樣,這也是選擇它的原因。使用非常簡單方便。
布局如下so easy:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent" >    <me.maxwin.view.XListView     android:id="@+id/xlv"     android:layout_width="match_parent"     android:layout_height="match_parent" />  </RelativeLayout> 

按照ListView的方式使用XlistView:

package com.itydl.xlistviewdemo;  import java.util.ArrayList; import java.util.List;  import me.maxwin.view.XListView; import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView;  public class MainActivity extends Activity {    private XListView mXListView;   List<String> datas = new ArrayList<String>();   private MyAdapter adapter;    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     initDatas();     mXListView = (XListView) findViewById(R.id.xlv);     //設定適配器到ListView     adapter = new MyAdapter();     mXListView.setAdapter(adapter);   }      /**類比網路資料*/   private void initDatas() {     for (int i = 0; i < 50; i++) {       datas.add("我是第" + i + "條資料");     }   }    private class MyAdapter extends BaseAdapter{      @Override     public int getCount() {       if(datas != null){         return datas.size();       }       return 0;     }      @Override     public Object getItem(int position) {       if(datas != null){         return datas.get(position);       }       return null;     }      @Override     public long getItemId(int position) {       return position;     }      @Override     public View getView(int position, View convertView, ViewGroup parent) {       //類比item為TextView       TextView textView = new TextView(MainActivity.this);       textView.setText(getItem(position)+"");       textView.setTextColor(Color.GREEN);       return textView;     }        } } 

運行結果:


上邊只是做了展示,並沒有任何載入和重新整理的效果。接下來就以完整代碼形式,實現載入更多與重新整理。

package com.itydl.xlistviewdemo;  import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List;  import me.maxwin.view.XListView; import me.maxwin.view.XListView.IXListViewListener; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView;  public class MainActivity extends Activity {    private XListView mXListView;   List<String> datas = new ArrayList<String>();   private MyAdapter adapter;   private boolean isLoadMore;//是否正在載入更多資料的標記      private long preTime;//上一次重新整理的當前系統時間毫秒值   private Handler handler = new Handler(){     public void handleMessage(android.os.Message msg) {       if(isLoadMore){         //訊息是上拉載入更多         initDatas();         isLoadMore = false;         //重新整理完畢,關閉上拉載入效果         mXListView.stopLoadMore();       }else{         //訊息是下拉重新整理         datas.clear();         initDatas();         //重新整理完畢,關閉下拉重新整理效果         mXListView.stopRefresh();       }       // 重新整理listview       adapter.notifyDataSetChanged();     };   };    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     initDatas();     mXListView = (XListView) findViewById(R.id.xlv);     //設定適配器到ListView     adapter = new MyAdapter();     mXListView.setAdapter(adapter);     initListener();   }      private void initListener() {     //設定可以下拉重新整理,預設就是true     mXListView.setPullRefreshEnable(true);          //設定可以上拉載入,預設是false     mXListView.setPullLoadEnable(true);          mXListView.setXListViewListener(new IXListViewListener() {              @Override       public void onRefresh() {         // 下拉重新整理,實際發送Handler         //發送一個空訊息,延遲兩秒後告知重新整理資料         handler.sendMessageDelayed(Message.obtain(), 2000);         //添加上一次重新整理的時間:         if(preTime != 0){           mXListView.setRefreshTime(refreshData(preTime));         }         preTime = System.currentTimeMillis();       }        private String refreshData(long preTime) {         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(preTime));       }        @Override       public void onLoadMore() {         //標記正在載入更多,發送Handler         isLoadMore = true;         handler.sendMessageDelayed(Message.obtain(), 2000);       }     });   }    /**類比網路資料*/   private void initDatas() {     //實際開發應該子線程執行     for (int i = 0; i < 50; i++) {       datas.add("我是第" + i + "條資料");     }   }    private class MyAdapter extends BaseAdapter{      @Override     public int getCount() {       if(datas != null){         return datas.size();       }       return 0;     }      @Override     public Object getItem(int position) {       if(datas != null){         return datas.get(position);       }       return null;     }      @Override     public long getItemId(int position) {       return position;     }      @Override     public View getView(int position, View convertView, ViewGroup parent) {       //類比item為TextView       TextView textView = new TextView(MainActivity.this);       textView.setText(getItem(position)+"");       textView.setTextColor(Color.GREEN);       return textView;     }   } } 

在上邊代碼中,添加了重新整理和載入,並且在下拉重新整理的同時,加入了重新整理時候系統時間值。
注意的地方:設定可否下拉重新整理預設為true,載入更多預設為false。需要加入下面兩行代碼:

//設定可以下拉重新整理,預設就是true mXListView.setPullRefreshEnable(true);  //設定可以上拉載入,預設是false mXListView.setPullLoadEnable(true); 

在重新整理完畢,一定記得關閉,即需要下面兩行代碼:

//重新整理完畢,關閉上拉載入效果mXListView.stopLoadMore();//重新整理完畢,關閉下拉重新整理效果 mXListView.stopRefresh(); 

運行看看效果:

如果想要改變它的樣式,也是很簡單的。因為它的頭布局和為布局是獨立開的,知直接去布局檔案修改一下顯示樣式就可以了。

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.