GridView在方向更改时失去图像

时间:2015-08-24 01:22:37

标签: android android-fragments android-activity gridview

我是初学者,在我的第一个应用程序上学习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);

我看到的问题如下

  1. 在屏幕从纵向旋转到横向或从横向旋转到纵向时,网格中的第一个图像为空...显示白色色块。所有其他图片都可以。

  2. 如果我点击其中一个可见的图像,它会转到详细活动,当我返回时,现在可以看到空白的图像

  3. 如果我尝试滚动,整个网格就会消失,留下白色背景。

  4. 我想发布截屏,但我没有足够的声望点。我真的很感激帮助。

0 个答案:

没有答案