【问题标题】:image display after second orientation change第二次方向改变后的图像显示
【发布时间】:2014-05-04 11:04:33
【问题描述】:

我使用以下代码保存和恢复图像,它在第一个方向改变后工作(纵向到横向)。但是,在我将其旋转回纵向模式(第二次方向更改)后,图像消失了,这是我不希望发生的。

请帮忙

保存图片代码

 @Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putParcelable("selectedImage", yourSelectedImage);


}

恢复代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.image);
if(savedInstanceState !=null){
        Bitmap yourSavedBitmap = savedInstanceState.getParcelable("selectedImage");
        image.setImageBitmap(yourSavedBitmap);

    }



}

【问题讨论】:

    标签: android screen-orientation


    【解决方案1】:

    您正在使用两个不同的变量来保存实例和恢复实例:

    yourSelectedImage
    

    yourSavedBitmap
    

    所以我假设您正在代码中的其他位置设置 var yourSelectedImage,将其序列化为保存的实例,但在恢复变量后为空。如果可能的话,放一些类似的东西:

    yourSelectedImage = yourSavedBitmap
    

    在您的恢复实例代码中。

    【讨论】:

      【解决方案2】:
      public class MainActivity extends Activity {
      
      private Bitmap bmp;
      private ImageView image;
      
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
      
          image = (ImageView)findViewById(R.id.image);
      
          // first time the app is started get the bitmap from unknown source.
          if(savedInstanceState == null) { 
              bmp = BitmapFactory.decodeFile("file location string");
          // after orientation change get your saved bitmap
          } else { 
              bmp = savedInstanceState.getParcelable("selectedImage");
          }
          image.setImageBitmap(bmp);
      }
      
      @Override
      public void onSaveInstanceState(Bundle savedInstanceState){
          super.onSaveInstanceState(savedInstanceState);
          savedInstanceState.putParcelable("selectedImage", bmp );
      }
      }
      

      【讨论】:

        【解决方案3】:

        好的,我现在可以自己回答了。 我放了一个preferenceManger 将Uir 存储为字符串:

        PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString(selectImage,"selected").commit();
        

        并在每次创建应用时调用它:

        savedImage = PreferenceManager.getDefaultSharedPreferences(this).getString("selectImage", "-1");
            try {
               if (savedImage != null) {
                   InputStream imageStream = null;
                   try {
                       imageStream = getContentResolver().openInputStream((Uri.parse(savedImage)));
                   } catch (FileNotFoundException e) {
                       e.printStackTrace();
                   }
                   Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
                   image.setImageBitmap(yourSelectedImage);
        
               }
            } catch (Throwable e){
               e.printStackTrace();
        
            }
        

        【讨论】:

          猜你喜欢
          • 2012-03-23
          • 2015-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多