1、一句话:viewPager 会保证 preFragment 、currentFragment 、nextFragment(fragment数量 >= 3时 )都处于onResume 就绪状态。
测试截图1:这是返回桌面(home返回)和再次打开程序的截图
测试截图2:这是不同的fragment之间切换的截图
设置过滤器截图(方便查看):
2、废话不多说,测试代码如下。1个MainActivity。8个名字不同的Fragment(其实5个应该就够了)。 自己拿着Demo代码跑两下应该就能很容易明白了。
MainActivity
package com.lfork.a98620.viewpagertest;
import android.content.Context;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
final String []pageTitles = {"政治", "体育", "教育", "汽车", "科技", "手机", "娱乐", "财经", "社会", "军事"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
// PagerAdapter pagerAdapter = new MyViewPagerAdapter ( initialNormalView());
PagerAdapter pagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), initialFragment());
viewPager.setAdapter(pagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
tabLayout.addOnTabSelectedListener(new TabSelectedListener());
tabLayout.setupWithViewPager(viewPager);
}
List<View> initialNormalView(){
LayoutInflater inflater = getLayoutInflater();
View view1 = inflater.inflate(R.layout.layout1, null);
View view2 = inflater.inflate(R.layout.layout2, null);
View view3 = inflater.inflate(R.layout.layout3, null);
View view4 = inflater.inflate(R.layout.layout3, null);
View view5 = inflater.inflate(R.layout.layout3, null);
View view6 = inflater.inflate(R.layout.layout3, null);
View view7 = inflater.inflate(R.layout.layout3, null);
View view8 = inflater.inflate(R.layout.layout3, null);
View view9 = inflater.inflate(R.layout.layout3, null);
View view10 = inflater.inflate(R.layout.layout3, null);
List<View> viewList = new ArrayList<>();
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
viewList.add(view4);
viewList.add(view5);
viewList.add(view6);
viewList.add(view7);
viewList.add(view8);
viewList.add(view9);
viewList.add(view10);
return viewList;
}
List<Fragment> initialFragment(){
List<Fragment> fragments = new ArrayList<>();
fragments.add(new BlankFragment1());
fragments.add(new BlankFragment2());
fragments.add(new BlankFragment3());
fragments.add(new BlankFragment4());
fragments.add(new BlankFragment5());
fragments.add(new BlankFragment6());
fragments.add(new BlankFragment7());
fragments.add(new BlankFragment8());
return fragments;
}
class TabSelectedListener implements TabLayout.OnTabSelectedListener{
@Override
public void onTabSelected(TabLayout.Tab tab) {
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
}
class MyViewPagerAdapter extends PagerAdapter {
private List<View> viewList;//view数组
public MyViewPagerAdapter(List<View> viewList) {
this.viewList = viewList;
}
//判断是否是由对象生成的界面
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return viewList.size();
}
@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
// TODO Auto-generated method stub
container.removeView(viewList.get(position));
}
//返回一个对象 ,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPager中
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
container.addView(viewList.get(position));
return viewList.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
return pageTitles[position];
// return super.getPageTitle(position);
}
}
class MyFragmentPagerAdapter extends FragmentPagerAdapter{
List<Fragment> fragments = new ArrayList<>();
public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int i) {
return fragments.get(i);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return pageTitles[position];
}
}
}
Fragment
package com.lfork.a98620.viewpagertest;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class BlankFragment2 extends Fragment {
private static final String TAG = "BlankFragment2";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_blank_fragment2, container, false);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
Log.d(TAG, "onAttach: ");
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: ");
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d(TAG, "onActivityCreated: ");
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d(TAG, "onDestroyView: ");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
@Override
public void onDetach() {
super.onDetach();
Log.d(TAG, "onDetach: ");
}
}
布局文件 MainActivity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.lfork.a98620.viewpagertest.MainActivity">
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:id="@+id/tabLayout"
app:tabMode="scrollable">
<android.support.design.widget.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab1"/>
<android.support.design.widget.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab2"/>
<android.support.design.widget.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab3"/>
<android.support.design.widget.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab4"/>
<android.support.design.widget.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab5"/>
<android.support.design.widget.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab6"/>
<android.support.design.widget.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab7"/>
<android.support.design.widget.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab8"/>
<android.support.design.widget.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab9"/>
<android.support.design.widget.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tab10"/>
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
</android.support.v4.view.ViewPager>
</LinearLayout>
布局文件 Fragment,其实8个Fragment可以使用同一个布局文件
<FrameLayout
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:background="#000"
tools:context="com.lfork.a98620.viewpagertest.BlankFragment1">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
</FrameLayout>