Android 使用视图作为页面而不是片段保存viewpager的状态

Android 使用视图作为页面而不是片段保存viewpager的状态,android,android-fragments,android-viewpager,android-view,android-pageradapter,Android,Android Fragments,Android Viewpager,Android View,Android Pageradapter,我有一个viewpager,它使用自定义视图,而不是片段作为页面。 这个自定义视图基本上是带有imageview的线性布局,因为我使用我的viewpager来显示图像 然而,当屏幕方向改变时,一切都消失了。包括我的观点。我做过调查和研究 大多数教程都展示了如何使用片段来实现这一点 我的viewpager适配器正在使用包含图像文件路径的arraylist 下面是我的viewpager的适配器。(注意:我使用的是一个arraylist,我在其中添加项目,然后调用notifyDataSetChan

我有一个viewpager,它使用自定义视图,而不是片段作为页面。 这个自定义视图基本上是带有imageview的线性布局,因为我使用我的viewpager来显示图像

然而,当屏幕方向改变时,一切都消失了。包括我的观点。我做过调查和研究

  • 大多数教程都展示了如何使用片段来实现这一点
我的viewpager适配器正在使用包含图像文件路径的arraylist

下面是我的viewpager的适配器。(注意:我使用的是一个arraylist,我在其中添加项目,然后调用
notifyDataSetChanged

下面是我的viewpager的适配器类

 public class ViewPagerAdapter extends PagerAdapter {

private Context context;
private LayoutInflater inflater;
private ArrayList<ImagePaths> imagesArray;

public  ViewPagerAdapter(Context context,ArrayList<ImagePaths> array, ){
    this.context = context;
    inflater =LayoutInflater.from(context);
    imagesArray = array;
}

public int getCount(){
    return imagesArray.size();
}

public boolean isViewFromObject(View view,Object object){
    return view == object;
}

public Object instantiateItem(ViewGroup viewGroup, int position){
    View view = inflater.inflate(R.layout.photo_layout, viewGroup, false);
    ImageView imageView =(ImageView) view.findViewById(R.id.photoView);

    final String imagePath = imagesArray.get(position);

    ImageLoader.getInstance().displayImage(imagePath, imageView);

    viewGroup.addView(view);
    return view;
}

public void destroyItem(ViewGroup container, int position, Object object){
    container.removeView((LinearLayout) object);
}
}
public类ViewPagerAdapter扩展了PagerAdapter{
私人语境;
私人充气机;
私人ArrayList imagesArray;
public ViewPagerAdapter(上下文上下文,ArrayList数组){
this.context=上下文;
充气器=充气器。从(上下文);
imagesArray=阵列;
}
public int getCount(){
返回imagesArray.size();
}
公共布尔值isViewFromObject(视图,对象){
返回视图==对象;
}
公共对象实例化项(视图组、视图组、int位置){
视图=充气机。充气(R.layout.photo_布局,视图组,false);
ImageView=(ImageView)view.findViewById(R.id.photoView);
最终字符串imagePath=imagesArray.get(位置);
ImageLoader.getInstance().displayImage(imagePath,imageView);
添加视图(视图);
返回视图;
}
公共项(视图组容器、int位置、对象){
container.removeView((LinearLayout)对象);
}
}

我需要做什么来保存我的viewpager的状态?

通过在中保存我的arraylist和当前位置,当屏幕方向改变时,我能够恢复我的viewpager的状态,包括它的当前页面

onSaveInstanceState
方法。稍后,我从方法onCreate(bundle savedInstanceState)中的bundle中获取arraylist和position

公共类myActivity扩展了AppCompactActivity{
私有ArrayList listviewArray;
私有int-savedImagePosition;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_布局);
如果(savedInstanceState!=null){
listviewArray=savedInstanceState.getParcelableArrayList(“图像数组”);
savedImagePosition=savedInstanceState.getInt(“savedImagePosition”);
}否则{
listviewArray=新建ArrayList();
savedImagePosition=0;
}
ViewPager ViewPager=(ViewPager)findViewById(R.id.ViewPager);
ViewPagerAdapter适配器=新的ViewPagerAdapter(此为listviewArray);
viewpager.setAdapter(适配器);
viewpager.setCurrentItem(savedImagePosition,true);
}
@凌驾
SaveInstanceState上受保护的无效(束超出状态){
super.onSaveInstanceState(超出状态);
putParcelableArrayList(“图像数组”,listviewArray);
outState.putInt(“savedImagePosition”,savedImagePosition);
}
}
我的viewpager适配器

public class ViewPagerAdapter extends PagerAdapter {

private Context context;
private LayoutInflater inflater;
private ArrayList<ImagePaths> imagesArray;

public  ViewPagerAdapter(Context context,ArrayList<ImagePaths> array, ){
    this.context = context;
    inflater =LayoutInflater.from(context);
    imagesArray = array;
}

public int getCount(){
    return imagesArray.size();
}

public boolean isViewFromObject(View view,Object object){
    return view == object;
}

public Object instantiateItem(ViewGroup viewGroup, int position){
    View view = inflater.inflate(R.layout.photo_layout, viewGroup, false);
    ImageView imageView =(ImageView) view.findViewById(R.id.photoView);

    final String imagePath = imagesArray.get(position);

    ImageLoader.getInstance().displayImage(imagePath, imageView);

    viewGroup.addView(view);
    return view;
}

public void destroyItem(ViewGroup container, int position, Object object){
    container.removeView((LinearLayout) object);
}
}
public类ViewPagerAdapter扩展了PagerAdapter{
私人语境;
私人充气机;
私人ArrayList imagesArray;
public ViewPagerAdapter(上下文上下文,ArrayList数组){
this.context=上下文;
充气器=充气器。从(上下文);
imagesArray=阵列;
}
public int getCount(){
返回imagesArray.size();
}
公共布尔值isViewFromObject(视图,对象){
返回视图==对象;
}
公共对象实例化项(视图组、视图组、int位置){
视图=充气机。充气(R.layout.photo_布局,视图组,false);
ImageView=(ImageView)view.findViewById(R.id.photoView);
最终字符串imagePath=imagesArray.get(位置);
ImageLoader.getInstance().displayImage(imagePath,imageView);
添加视图(视图);
返回视图;
}
公共项(视图组容器、int位置、对象){
container.removeView((LinearLayout)对象);
}
}
public class ViewPagerAdapter extends PagerAdapter {

private Context context;
private LayoutInflater inflater;
private ArrayList<ImagePaths> imagesArray;

public  ViewPagerAdapter(Context context,ArrayList<ImagePaths> array, ){
    this.context = context;
    inflater =LayoutInflater.from(context);
    imagesArray = array;
}

public int getCount(){
    return imagesArray.size();
}

public boolean isViewFromObject(View view,Object object){
    return view == object;
}

public Object instantiateItem(ViewGroup viewGroup, int position){
    View view = inflater.inflate(R.layout.photo_layout, viewGroup, false);
    ImageView imageView =(ImageView) view.findViewById(R.id.photoView);

    final String imagePath = imagesArray.get(position);

    ImageLoader.getInstance().displayImage(imagePath, imageView);

    viewGroup.addView(view);
    return view;
}

public void destroyItem(ViewGroup container, int position, Object object){
    container.removeView((LinearLayout) object);
}
}