ViewPager巢狀fragment簡單使用
最近在公司沒有什麼新的開發任務,就複習一下以前的知識,Android大多數應用都是ViewPager+fragment實現主頁面的框架結構,今天就簡單的介紹一下ViewPager和fragment的簡單使用。
首先看一下activity的佈局:
- 1
- 2
- 3
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="ledon.com.servicedemo.ViewPagerActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</android.support.v4.view.ViewPager>
</RelativeLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
在佈局檔案中新增ViewPager的控制元件,這裡需要說明一下ViewPager要在v4包裡引用,並且在ViewPager需要用到介面卡,一般情況下單獨使用ViewPager的時候我們使用pagerAdapter,這裡我們要使用fragment的時候,我們就需要使用FagmentPagerAdapter,這裡說一下FragmentPagerAdapter繼承PagerAdapter。
- 1
- 2
下面看看Adapter適配的使用:
package ledon.com.servicedemo.adapter;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.List;
/**
* Created by Administrator on 2017/3/30.
*/
public class FragmentAdapter extends FragmentPagerAdapter {
//存放fragment的集合
private List<Fragment> mFragments;
public FragmentAdapter(FragmentManager fm, List<Fragment> mFragments) {
super(fm);
this.mFragments = mFragments;
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
FragmentManager 頁面管理器,使用這個管理器的時候一定要注意,如果你匯入的是支援v4的,以後用到的都要是v4相容的,不然會出現問題。
接下來建立三個fragment:OneFragment,TwoFragment,ThreeFagment的原始碼;
在這裡xml檔案和Java檔案都差不多,我們只需要貼上一個就可以:
xml檔案:
- 1
- 2
- 3
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff0"
android:orientation="vertical">
<TextView
android:text="我是第一個fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
java檔案:
package ledon.com.servicedemo.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import ledon.com.servicedemo.R;
/**
* Created by Administrator on 2017/3/30.
*/
public class OneFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_one, container, false);
return view;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
最後看看我們是怎麼讓ViewPager巢狀fragment動起來的:
package ledon.com.servicedemo;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import ledon.com.servicedemo.adapter.FragmentAdapter;
import ledon.com.servicedemo.fragment.OneFragment;
import ledon.com.servicedemo.fragment.ThreeFragment;
import ledon.com.servicedemo.fragment.TwoFragment;
public class ViewPagerActivity extends AppCompatActivity {
@InjectView(R.id.viewpager)
ViewPager viewpager;
@InjectView(R.id.activity_view_pager)
RelativeLayout activityViewPager;
private View one;
private View two;
private View three;
private List<Fragment> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager);
ButterKnife.inject(this);
initData();
}
/**
* 初始化資料
*/
private void initData() {
//建一個存放fragment的集合,並且把新的fragment放到集合中
list = new ArrayList<Fragment>();
list.add(new OneFragment());
list.add(new TwoFragment());
list.add(new ThreeFragment());
//初始化adapter
FragmentAdapter adapter = new FragmentAdapter(getSupportFragmentManager(), list);
//將介面卡和ViewPager結合
viewpager.setAdapter(adapter);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
效果圖:
相關文章
- 解決 ViewPager 巢狀導致的 Fragment 選單錯亂Viewpager巢狀Fragment
- Fragment巢狀FragmentViewPager 正常使用姿勢Fragment巢狀Viewpager
- Android使用(TabLayout+ViewPager+fragment)與(FragmentTabHost+ViewPager+Fragment)實現底部狀態列切換AndroidTabLayoutViewpagerFragment
- 在Fragment裡使用viewpagerFragmentViewpager
- 【Android Fragment】解決ViewPager巢狀時Fragment的mUserVisibleHint屬性不同步的問題AndroidFragmentViewpager巢狀
- 【BUG系列】Fragment中巢狀Fragment,不顯示Fragment巢狀
- Android觸控事件傳遞機制及viewpager巢狀fragment衝突處理Android事件Viewpager巢狀Fragment
- Android實現雙層ViewPager巢狀AndroidViewpager巢狀
- UpdatePanel的簡單用法(非巢狀)巢狀
- 對比SQL中簡單巢狀查詢與非巢狀查詢CFSQL巢狀
- 用getChildFragmentManager解決Fragment巢狀Fragment資料丟失的問題Fragment巢狀
- Android開發之ViewPager簡單使用AndroidViewpager
- 多層巢狀後的 Fragment 懶載入實現巢狀Fragment
- Android 在 ViewPager 中使用 Fragment 的懶載入AndroidViewpagerFragment
- Android中Fragment巢狀Fragment,切換Fragment時不顯示檢視的原因及解決方法AndroidFragment巢狀
- 最佳化兩個簡單的巢狀迴圈巢狀
- tablayout+viewpager+fragment懶載入TabLayoutViewpagerFragment
- 仿淘寶、京東拖拽商品詳情(可巢狀ViewPager、ListView、WebView、FragmentTabhost)巢狀ViewpagerWebViewFragment
- Android 多個Fragment巢狀導致的三大BUGAndroidFragment巢狀
- element-ui的----el-form表單校驗巢狀表單校驗(表單多層巢狀)+el-table和el-form巢狀使用表單校驗UIORM巢狀
- 巢狀動畫如何使用巢狀動畫
- iterate的巢狀使用巢狀
- 巢狀使用 datalist (轉)巢狀
- 高德地圖fragment 動態載入地圖 巢狀問題地圖Fragment巢狀
- Android開發之ViewPager+Fragment+FragmentTabHost實現底部選單AndroidViewpagerFragment
- Android ViewPager2 + Fragment 聯動AndroidViewpagerFragment
- ViewPager+Fragment LazyLoad 最優解ViewpagerFragment
- Android開發之ViewPager+FragmentAndroidViewpagerFragment
- 【Android ViewPager】解決ViewPager巢狀時在API 13及其以下版本中不能滑動的問題AndroidViewpager巢狀API
- Repeater中巢狀使用Repeater巢狀
- android viewpager使用Fragment懶載入,滑到當前fragment才進行資料載入AndroidViewpagerFragment
- Vue案例引發的「巢狀元件」通訊的簡單方式Vue巢狀元件
- 【Android Fragment】解決Fragment多層巢狀時onActivityResult無法正確回撥的問題AndroidFragment巢狀
- 解決ScrollView巢狀ViewPager出現的滑動衝突問題巢狀Viewpager
- ViewPager、Fragment和TabLayout實現切頁效果ViewpagerFragmentTabLayout
- TabLayout+ViewPager+Fragment實現切頁展示TabLayoutViewpagerFragment
- TabLayout-ViewPager填充Fragment和懶載入TabLayoutViewpagerFragment
- TabLayout+ViewPager+fragment實現懶載入TabLayoutViewpagerFragment