gpt4 book ai didi

android - 使用 View 作为页面而不是 fragment 保存 viewpager 的状态

转载 作者:行者123 更新时间:2023-11-29 00:04:17 24 4
gpt4 key购买 nike

我有一个使用自定义 View 而不是 fragment 作为页面的 viewpager。这个自定义 View 基本上是一个带有 ImageView 的线性布局,因为我正在使用我的 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);
}
}

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

最佳答案

通过保存我的数组列表和当前位置,我能够恢复我的 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);

}

}

我的 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 - 使用 View 作为页面而不是 fragment 保存 viewpager 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35150597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com