我是初学者,在我的第一个应用程序上学习android基础知识。我的应用程序包含图像的网格视图。单击每个图像将打开另一个活动,其中包含有关图像的一些详细信息。我使用Picasso来加载所有图像。 问题是当屏幕旋转时,我已经使用onSaveInstanceState()来保存片段的状态,并且还避免再次从服务器获取图像。这是片段代码:
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putParcelableArrayList("key", movielist);
super.onSaveInstanceState(outState);
}
我在片段的onCreateView中提取已保存的状态,如此
if(savedInstanceState == null){
movielist = new ArrayList<Movie>();
}else{
movielist = (ArrayList<Movie>) savedInstanceState.get("key");
}
如上所述,我使用我刚刚使用适配器检索的列表
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
GridView gridview = (GridView) rootView.findViewById(R.id.gridview);
ImageView imageView = (ImageView) getActivity().findViewById(R.id.grid_img_view);
Log.v(LOG_TAG + SIG, "setup ImageAdapter");
mMovieAdapter = new ImageAdapter(gridview.getContext(), imageView, movielist);
gridview.setAdapter(mMovieAdapter);
为防止进一步提取数据,我在片段的onStart中执行以下操作
@Override
public void onStart() {
String SIG = "onStart";
Log.v(LOG_TAG + SIG, "Entering");
super.onStart();
if(movielist.size() == 0)
fetchMovies();
Log.v(LOG_TAG + SIG, "Exiting");
}
这是适配器的getView中代码的关键
if (convertView == null) {
Log.v(LOG_TAG + SIG, "Convertview is null");
GridView.LayoutParams layoutParams =
new GridView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.height = height / 2;
layoutParams.width = width / 2;
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setBackgroundColor(Color.BLACK);
imageView.setLayoutParams(layoutParams);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
} else {
Log.v(LOG_TAG + SIG, "Convertview is not null");
imageView = (ImageView) convertView;
}
Log.v(LOG_TAG + SIG, "Calling picasso with: " + moviePosterPaths.get(position));
Picasso.with(mContext)
.load(moviePosterPaths.get(position).getMovieUrl())
.error(R.drawable.placeholder)
.into(imageView);
我看到的问题如下
在屏幕从纵向旋转到横向或从横向旋转到纵向时,网格中的第一个图像为空...显示白色色块。所有其他图片都可以。
如果我点击其中一个可见的图像,它会转到详细活动,当我返回时,现在可以看到空白的图像
如果我尝试滚动,整个网格就会消失,留下白色背景。
我想发布截屏,但我没有足够的声望点。我真的很感激帮助。