【问题标题】:Saving the state of a viewpager using views as pages and not fragments使用视图作为页面而不是片段来保存 viewpager 的状态
【发布时间】:2016-02-02 10:16:09
【问题描述】:

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

但是,当屏幕方向发生变化时,一切都会消失。包括我的imageviews。我做了研究和

我的 viewpager 适配器正在使用一个包含图像文件路径的数组列表。

下面是我的 viewpager 的适配器。(注意:我使用数组列表向其中添加项目,然后调用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);
}
}

我需要做什么来保存我的浏览器的状态?

【问题讨论】:

    标签: android android-fragments android-viewpager android-view android-pageradapter


    【解决方案1】:

    当屏幕方向发生变化时,我能够通过将我的数组列表和当前位置保存在

    中来恢复我的 viewpager 的状态,包括它的当前页面

    onSaveInstanceState 方法。稍后我在方法onCreate(Bundle savedInstanceState)中从包中获取数组列表和位置@

    public class myActivity extends AppCompactActivity{
    
      private ArrayList<ImagePaths> listviewArray;
      private int savedImagePosition;
    
      @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout);
    
        if(savedInstanceState != null){
            listviewArray = savedInstanceState.getParcelableArrayList("image_array");
            savedImagePosition = savedInstanceState.getInt("savedImagePosition");
    
        }else{
            listviewArray = new ArrayList<>();
            savedImagePosition =0;
        }
    
        ViewPager viewpager = (ViewPager) findViewById(R.id.viewpager);
    
        ViewPagerAdapter adapter = new ViewPagerAdapter(this,listviewArray);
    
        viewpager.setAdapter(adapter);
        viewpager.setCurrentItem(savedImagePosition,true);
      }
    
     @Override
    protected void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState(outState);
        outState.putParcelableArrayList("image_array", listviewArray);
        outState.putInt("savedImagePosition",savedImagePosition);
    
    }
    
    }
    

    我的浏览器适配器

    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);
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2019-04-10
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      相关资源
      最近更新 更多