91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

【移動開發】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

舟曲县| 彰武县| 深州市| 吴忠市| 永宁县| 布拖县| 石首市| 闽侯县| 绥芬河市| 桦川县| 杨浦区| 迁西县| 清涧县| 龙里县| 安泽县| 江北区| 策勒县| 明溪县| 九龙坡区| 原平市| 沂源县| 凤山市| 马鞍山市| 秭归县| 登封市| 利津县| 青田县| 宜阳县| 高州市| 会理县| 济阳县| 永安市| 宝坻区| 富源县| 灵川县| 永年县| 大埔县| 闸北区| 忻城县| 阿克| 枣庄市|