FragementStatePagerAdapter会销毁不要的fragment。activity中的FragmentManger的fragment会彻底删除。FragmentStatePagerAdapter类名中的state表明可在onSavelnstanceState(Bundle)方法中保存fragment的Bundle信息。用户切换回来时,保存的实例状态可用来恢复生成新的fragment。页面多时和有数据需要刷新时必须使用FragmentStatePagerAdapter。(使用的是remove方法)
页面少时可以用FragmentPagerAdapter(不常用,使用的是detach(分离)的方法)
PagerFragment.java;
Public Class PagerFragment extends Fragment{
String mContent;
TextView textview;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
mContent (String) getArgrguments().get("content");
View view = inflater.inflate(R.layout.fragment,conteiner,flash);
textview = view.findViewById(R.id.tv);
textview.setText(mContent);
return view;
}
}
farment.xml
<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"
tools:context="com.strivestay.viewpagerdemo.PagerFragment">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="18sp"
android:text="@string/hello_blank_fragment"/>
</FrameLayout>
MainActivity.java
package com.example.myapplication;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setVp();
}
private void set(){
final List<PagerFragment> list = arrayList<>();
for(int i =0; i<5; i++) {
PagerFragment fragment = new PagerFragment();
Bundle bundle = new Bundle();
bundle.putString("content","第"+i+"个fragment");
fragment.setArguments(bundle);
list.add(fragment);
}
ViewPager vp = (ViewPager) findViewById(R.id.vp);
vp.setAdapter(new FragmentStatePager(getSupportFargmentManager()){
@Override
public Fragment getItem(int position) {
return list.get(position);
}
public int getCount(){
return list.size();
}
});
}