如何實現可動態調整隱藏header的listview
需求:根據某種需要,可能需要動態調整listview的頁眉頁腳,譬如將header作爲顯示板使用。
SharedPreferences類,它是一個輕量級的存儲類,特別適合用於保存軟件配置參數。
SharedPreferences保存數據,其背後是用xml文件存放數據,文件存放在/data/data/<package name>/shared_prefs目錄下:
一個簡單的存儲代碼如下:
SharedPreferences sharedPreferences = getSharedPreferences("wujay", Context.MODE_PRIVATE); //私有數據
Editor editor = sharedPreferences.edit();//獲取編輯器
editor.putString("name", "wujaycode");
editor.putInt("age", 4);
editor.commit();//提交修改
生成的wujay.xml文件內容如下:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="name">wujaycode</string>
<int name="age" value="4" />
</map>
分析以下幾個方法:
一、getSharedPreferences(name,mode)
方法的第一個參數用於指定該文件的名稱,名稱不用帶後綴,後綴會由Android自動加上;
方法的第二個參數指定文件的操作模式,共有四種操作模式。
四種操作模式分別爲:
1. MODE_APPEND: 追加方式存儲
2. MODE_PRIVATE: 私有方式存儲,其他應用無法訪問
3. MODE_WORLD_READABLE: 表示當前文件可以被其他應用讀取
4. MODE_WORLD_WRITEABLE: 表示當前文件可以被其他應用寫入
二、edit()方法獲取editor對象
Editor editor = sharedPreferences.edit();
editor存儲對象採用key-value鍵值對進行存放,editor.putString("name", "wujaycode");
通過commit()方法提交數據
與之對應的獲取數據的方法:
SharedPreferences share=getSharedPreferences("Acitivity",Activity.MODE_WORLD_READABLE);
int i=share.getInt("i",0);
String str=share.getString("str","");
boolean flag=share.getBoolean("flag",false);
getString()第二個參數爲缺省值,如果preference中不存在該key,將返回缺省值
如果你想要刪除通過SharedPreferences產生的文件,可以通過以下方法:
File file= new File("/data/data/"+getPackageName().toString()+"/shared_prefs","Activity.xml");
if(file.exists()){
file.delete();
Toast.makeText(TestActivity.this, "刪除成功", Toast.LENGTH_LONG).show(); }
三、訪問其他應用中的Preference
如果要訪問其他應用中的Preference,必須滿足的條件是,要訪問的應用的Preference創建時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE權限。
舉例,假如有個<package name>爲com.wujay.action下面的應用使用了下面語句創建了Preference,getSharedPreferences("wujay", Context.MODE_WORLD_READABLE),
現在要訪問該Preferences:
如果adapter中的數據量很大的時候,在加載listview時會出現卡頓的現象。這是會讓用戶抓狂!最好的解決辦法就是先加載一定數量的數據,然後在最下方提示正在加載!
動態加載就是把放入adapter中的數據分好幾次加載。在用戶拖動listview時再加載一定的數據,和sina微博的客戶端類似。
給listview添加OnScrollListener監聽事件默認會覆蓋下面兩個方法:
Java代碼 收藏代碼
- OnScrollListener loadListener=new OnScrollListener() {
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem,
- int visibleItemCount, int totalItemCount) {
- lastItem = firstVisibleItem + visibleItemCount;
- }
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- //listview滾動時會執行這個方法,這兒調用加載數據的方法。
- adapter.notifyDataSetChanged();//提醒adapter更新
- uList.setSelection(lastItem - 1);//設置listview的當前位置,如果不設置每次加載完後都會返回到list的第一項。
- }
- }
- };