Android網(wǎng)絡(luò)與數(shù)據(jù)存儲
第一章學(xué)習(xí)
一個啟動引導(dǎo)頁的制作####
概要:
這次制作App的引導(dǎo)頁,主要用到2個知識“SharedPreferences 和 ViewPager”
Genymotion的Android模擬器瞻想,版本5.1.0以下是默認(rèn)root的枢纠,可以使用RootExplorer4軟件操作系統(tǒng)目錄晌梨,其它包括SDK內(nèi)的官方模擬器……洗洗睡吧……太煩了歹苦,還不如下個Genymotion监右,血的教訓(xùn)
1.SharedPreferences#####
SharedPreferences是一種Android提供的,簡易的用于在手機(jī)上永久化保存數(shù)據(jù)的類潦牛,這個輕量級的類在保存數(shù)據(jù)時眶掌,使用常見的“Key、Value”鍵值對進(jìn)行保存巴碗,并生成對應(yīng)的xml文件朴爬。
為了使用SharedPreferences,需要以下幾步來實現(xiàn)
第一步:得到 SharedPreferences 對象橡淆,Android 中主要提供了三種方法來得到此對象召噩,如下代碼所示
//1. Context 類中的 getSharedPreferences()方法
public abstract SharedPreferences getSharedPreferences
(String name,int mode);
//2. Activity 類中的 getPreferences()方法
public SharedPreferences getPreferences(int mode) {
return getSharedPreferences(getLocalClassName(), mode);
}
//3. PreferenceManager 類中的 getDefaultSharedPreferences()方法
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(
getDefaultSharedPreferencesName(context)
,getDefaultSharedPreferencesMode());
}
歸根到底,3個方法都是調(diào)用的Context 類中的 getSharedPreferences()方法逸爵,此方法傳入的兩個參數(shù):
- 第一個參數(shù)用于指定 SharedPreferences 文件的名稱具滴,如果 指 定 的 文 件 不 存 在 則 會 創(chuàng) 建 一 個 ,SharedPreferences 文 件 都 是 存 放 在/data/data/"package name"/shared_prefs/目錄下的痊银。
- 第二個參數(shù)用于指定操作模式抵蚊,就用MODE_PRIVATE吧施绎,其它方法都過期了(哈哈溯革,僅供參考)
第二步:得到 SharedPreferences.Editor 對象,進(jìn)行寫入操作谷醉。
SharedPreferences.Editor editor = sharedPreferences.edit();
//通過SharedPreferences的實例取得Editor
editor.putBoolean("isRead", true);
//放入數(shù)據(jù)致稀,提供各類put方法對應(yīng)不同類型的數(shù)據(jù),按鍵值對進(jìn)行輸入
editor.commit();
//調(diào)用調(diào)用 commit()方法將添加的數(shù)據(jù)立即提交俱尼,不過AS推薦使用apply()抖单,區(qū)別請看下方網(wǎng)址
http://blog.csdn.net/s04103037/article/details/40372659
第三步:從SharedPreferences對象進(jìn)行讀取操作。
使用第一步的方法后遇八,可以直接使用各種get方法取得相應(yīng)類型的數(shù)值矛绘。
SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name", "");
int age = pref.getInt("age", 0);
boolean married = pref.getBoolean("married", false);
get方法中第一個參數(shù)是鍵名,第二個是當(dāng)無此鍵值對時所返回到默認(rèn)值刃永。
這樣就從SharedPreferences所保存的文件中取得了數(shù)據(jù)货矮,實現(xiàn)了簡單數(shù)據(jù)的永久化。
2.ViewPager#####
先畫個圖斯够,直觀理解下結(jié)構(gòu)順序
本來想畫圖的……表達(dá)不清囚玫,算了……
那貼個代碼喧锦,對照著上面這圖看看
activity_start.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary">
</android.support.v4.view.ViewPager>
StartActivity.java
public class StartActivity extends FragmentActivity {
public static final int PAGE_NUM = 2;
private FragmentPagerAdapter mAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate: ");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
mViewPager = (ViewPager) findViewById(R.id.pager);
//①通過布局實例化ViewPager
mViewPager.setPageTransformer(true, new ZoomOutPageTransformer());
//②添加動畫效果
mAdapter = new StartPagerAdapter(getSupportFragmentManager());
//③通過子類實例化FragmentPagerAdapter
mViewPager.setAdapter(mAdapter);
//④綁定Adapter
}
}
ZoomOutPageTransformer是自定義的動畫類块攒,這部分也是非常自由的表現(xiàn)方式汁讼,不寫例子了岗憋,省略采够。
StartPagerAdapter.java
public class StartPagerAdapter extends FragmentPagerAdapter {
String TAG = getClass().getSimpleName();
public StartPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return StartActivity.PAGE_NUM;
}
@Override
public Fragment getItem(int position) {
Log.i(TAG, "getItem: " + position);
if (position == 0) {
return new PageOneFragment();
} else {
return new PageTwoFragment();
}
}
}
其中Fragment怎么做大家都知道地啰,省略儿咱,我制作了兩個拇泣,名叫PageOneFragment和PageTwoFragment奖磁。自定義一個繼承自FragmentPagerAdapter的Adaper類用于管理Fragment涌穆,另一個FragmentStatePagerAdapter也是同樣用于Fragment怔昨,但跟前者效果不同,區(qū)別如下:
FragmentPageAdapter:和PagerAdapter一樣宿稀,只會緩存當(dāng)前的Fragment以及左邊一個趁舀,右邊 一個,即總共會緩存3個Fragment而已祝沸,假如有1矮烹,2,3罩锐,4四個頁面:
處于1頁面:緩存1奉狈,2
處于2頁面:緩存1,2涩惑,3
處于3頁面:銷毀1頁面仁期,緩存2,3竭恬,4
處于4頁面:銷毀2頁面跛蛋,緩存3,4
更多頁面的情況痊硕,依次類推~FragmentStatePagerAdapter:當(dāng)Fragment對用戶不 見得時赊级,整個Fragment會被銷毀, 只會保存Fragment的狀態(tài)岔绸!而在頁面需要重新顯示的時候理逊,會生成新的頁面!
好盒揉,新建了一個自定義類晋被,必須重寫2個重要的方法:
- getCount():獲得viewpager中有多少個view,我這寫了2個
- getItem(int position):根據(jù)position來決定返回哪個Fragment刚盈。此處position會依次出現(xiàn)0,1,2,3等整型數(shù)字羡洛。
基本上就這樣~看看效果
-完-