中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【移動開發】Android中Fragment+ViewPager的配合使用

發布時間:2020-07-22 23:58:23 來源:網絡 閱讀:77982 作者:zhf651555765 欄目:開發技術

原本在上一篇博客中要講解一個Fragment的綜合應用,但是中間又想到了滑屏方式,所以就分類在總結了一下【移動開發】Android中Fragment+ViewPager的配合使用,(http://smallwoniu.blog.51cto.com/3911954/1308959)今天我將繼續總結,關于Fragment+ViewPager的使用!


官方文檔:http://developer.android.com/reference/android/support/v4/view/ViewPager.html

ViewPager is most often used in conjunction with Fragment, which is a convenient way to supply and manage the lifecycle of each page. There are standard adapters implemented for using fragments with the ViewPager, which cover the most common use cases. These are FragmentPagerAdapter andFragmentStatePagerAdapter; each of these classes have simple code showing how to build a full user interface with them.


這里大家可以回憶一下如果像上篇中介紹ViewPager的使用,葉片填充數據是Layout,頁面少的話還可以,如果頁面過多的話,全部加載到手機內存中,可能會耗盡內存,手動銷毀又太麻煩。官方推薦 ViewPager與Fragment一起使用,可以更加方便的管理每個Page的生命周期,這里有標準的適配器實現用于ViewPager和Fragment,涵蓋最常見的用例。FragmentPagerAdapterFragmentStatePagerAdapter這兩個類都有簡單的代碼顯示如何構建一個完整的用戶界面與他們。


適配器類:

package com.zhf.android_viewpager_fragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
/**
 * 自定義fragment適配器
 * @author ZHF
 *
 */
public class MyFragmentPageAdapter extends FragmentPagerAdapter {
    public MyFragmentPageAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public int getCount() {
        return 3;
    }
    @Override
    public Fragment getItem(int position) {
        switch (position) {
         case 0:
                return MyFragment.newInstance(position);
            case 1:
                return MyFragment.newInstance(position);
            case 2:
                return MyFragment.newInstance(position);
            default:
                return null;
            }
    }
}


MyFragment類:

package com.zhf.android_viewpager_fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
 * 用于創建Fragment對象,作為ViewPager的葉片
 * @author ZHF
 *
 */
public class MyFragment extends Fragment {
                                                                                                                                                                                                                                                                                                                 
    int mNum; //頁號
    public static MyFragment newInstance(int num) {
        MyFragment fragment = new MyFragment();
        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putInt("num", num);
        fragment.setArguments(args);
        return fragment;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //這里我只是簡單的用num區別標簽,其實具體應用中可以使用真實的fragment對象來作為葉片
        mNum = getArguments() != null ? getArguments().getInt("num") : 1;
    }
    /**為Fragment加載布局時調用**/
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
                                                                                                                                                                                                                                                                                                                     
        View view = inflater.inflate(R.layout.fragment_pager_list, null);
        TextView tv = (TextView) view.findViewById(R.id.text);
        tv.setText("fragment+" + mNum);
        return view;
    }
}


布局文件:


activity_main.xml

<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" >
                                                                                                                                                                                                                                                                                          
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</RelativeLayout>

fragment_pager_list.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:drawable/gallery_thumb"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical|center_horizontal"
        android:text="@string/hello_world"
        android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>


MainActivity類:

package com.zhf.android_viewpager_fragment;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
public class MainActivity extends FragmentActivity {
    private ViewPager mViewPager;
    private MyFragmentPageAdapter mAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mViewPager = (ViewPager) findViewById(R.id.viewpager);
                                                                                                                                                                                                                                
        //這里因為是3.0一下版本,所以需繼承FragmentActivity,通過getSupportFragmentManager()獲取FragmentManager
        //3.0及其以上版本,只需繼承Activity,通過getFragmentManager獲取事物
        FragmentManager fm = getSupportFragmentManager();
        //初始化自定義適配器
        mAdapter =  new MyFragmentPageAdapter(fm);
        //綁定自定義適配器
        mViewPager.setAdapter(mAdapter);
    }
}


效果圖:

【移動開發】Android中Fragment+ViewPager的配合使用

效果與ViewPager中添加View的效果是一樣的!但是它與View的區別在于它有自己的生命周期,可以隨時更改自己的狀態便于管理。


事實上使用FragmentPagerAdapter 時,Fragment對象會一直存留在內存中,所以當有大量的顯示頁時,就不適合用FragmentPagerAdapter了,FragmentPagerAdapter 適用于只有少數的page情況,像選項卡

這個時候你可以考慮使用FragmentStatePagerAdapter當使用FragmentStatePagerAdapter 時,如果Fragment不顯示,那么Fragment對象會被銷毀,(滑過后會保存當前界面,以及下一個界面和上一個界面(如果有),最多保存3個,其他會被銷毀掉
但在回調onDestroy()方法之前會回調onSaveInstanceState(Bundle outState)方法來保存Fragment的狀態,下次Fragment顯示時通過onCreate(Bundle savedInstanceState)把存儲的狀態值取出來,
FragmentStatePagerAdapter
比較適合頁面比較多的情況,像一個頁面的ListView










向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福海县| 乌苏市| 滦南县| 德庆县| 定日县| 灵山县| 永济市| 会东县| 方城县| 宁河县| 永康市| 海口市| 潼关县| 双鸭山市| 蒙山县| 南投县| 厦门市| 湖南省| 正安县| 卓资县| 望江县| 西丰县| 靖宇县| 阿尔山市| 大港区| 蒲城县| 九江县| 巢湖市| 乌恰县| 阳江市| 通化县| 永仁县| 天长市| 收藏| 北海市| 徐水县| 莱芜市| 合作市| 闽清县| 涟源市| 施甸县|