Android網絡與數據存儲
第一章學習
一個啟動引導頁的制作####
概要:
這次制作App的引導頁,主要用到2個知識“SharedPreferences 和 ViewPager”
Genymotion的Android模擬器,版本5.1.0以下是默認root的,可以使用RootExplorer4軟件操作系統目錄,其它包括SDK內的官方模擬器……洗洗睡吧……太煩了,還不如下個Genymotion,血的教訓
1.SharedPreferences#####
SharedPreferences是一種Android提供的,簡易的用于在手機上永久化保存數據的類,這個輕量級的類在保存數據時,使用常見的“Key、Value”鍵值對進行保存,并生成對應的xml文件。
為了使用SharedPreferences,需要以下幾步來實現
第一步:得到 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個方法都是調用的Context 類中的 getSharedPreferences()方法,此方法傳入的兩個參數:
- 第一個參數用于指定 SharedPreferences 文件的名稱,如果 指 定 的 文 件 不 存 在 則 會 創 建 一 個 ,SharedPreferences 文 件 都 是 存 放 在/data/data/"package name"/shared_prefs/目錄下的。
- 第二個參數用于指定操作模式,就用MODE_PRIVATE吧,其它方法都過期了(哈哈,僅供參考)
第二步:得到 SharedPreferences.Editor 對象,進行寫入操作。
SharedPreferences.Editor editor = sharedPreferences.edit();
//通過SharedPreferences的實例取得Editor
editor.putBoolean("isRead", true);
//放入數據,提供各類put方法對應不同類型的數據,按鍵值對進行輸入
editor.commit();
//調用調用 commit()方法將添加的數據立即提交,不過AS推薦使用apply(),區別請看下方網址
http://blog.csdn.net/s04103037/article/details/40372659
第三步:從SharedPreferences對象進行讀取操作。
使用第一步的方法后,可以直接使用各種get方法取得相應類型的數值。
SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name", "");
int age = pref.getInt("age", 0);
boolean married = pref.getBoolean("married", false);
get方法中第一個參數是鍵名,第二個是當無此鍵值對時所返回到默認值。
這樣就從SharedPreferences所保存的文件中取得了數據,實現了簡單數據的永久化。
2.ViewPager#####
先畫個圖,直觀理解下結構順序
本來想畫圖的……表達不清,算了……
那貼個代碼,對照著上面這圖看看
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是自定義的動畫類,這部分也是非常自由的表現方式,不寫例子了,省略。
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,但跟前者效果不同,區別如下:
FragmentPageAdapter:和PagerAdapter一樣,只會緩存當前的Fragment以及左邊一個,右邊 一個,即總共會緩存3個Fragment而已,假如有1,2,3,4四個頁面:
處于1頁面:緩存1,2
處于2頁面:緩存1,2,3
處于3頁面:銷毀1頁面,緩存2,3,4
處于4頁面:銷毀2頁面,緩存3,4
更多頁面的情況,依次類推~FragmentStatePagerAdapter:當Fragment對用戶不 見得時,整個Fragment會被銷毀, 只會保存Fragment的狀態!而在頁面需要重新顯示的時候,會生成新的頁面!
好,新建了一個自定義類,必須重寫2個重要的方法:
- getCount():獲得viewpager中有多少個view,我這寫了2個
- getItem(int position):根據position來決定返回哪個Fragment。此處position會依次出現0,1,2,3等整型數字。
基本上就這樣~看看效果
-完-