2011-11-24 102 views
0

我试图在savedInstanceState中保存ImageButton的路径,以便不会丢失用于旋转手机的图像。但是,只有一次它之后的路径值i等于空(路径== NULL)如何保存ImageButton的状态

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentLayout(R.layout.contact_information_wga800); 

    if (savedInstanceState != null) { 
     String profilefirstname = savedInstanceState.getString("firstname"); 
     firstname.setText(profilefirstname); 
     String profilepath=savedInstanceState.getString("path"); 
     if(profilepath !=null){ 
      imagebutton.setImageBitmap(BitmapFactory.decodeFile(profilepath)); 
     } 
    } 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) 
{ 
    savedInstanceState.putString("firstname", firstname.getText().toString()); 
    savedInstanceState.putString("path", media_path); 
    super.onSaveInstanceState(savedInstanceState); 
} 

这是一部分,当我用相机或Android图库中ImageButton的位图中设置工作。

switch(requestCode) { 
    case REQUEST_CAMERA: 
     if (resultCode == RESULT_OK) { 
      final Bundle extras = data.getExtras(); 
      bmp = (Bitmap)extras.get("data"); 
      if(bmp != null) { 
       final File f = this.getFileStreamPath("ping_media.jpg"); 
       if (f.exists()) { 
        f.delete(); 
       } 
       try { 
        final FileOutputStream out = this.openFileOutput("ping_media.jpg",MODE_PRIVATE); 
        bmp.compress(CompressFormat.JPEG, 12, out); 
        out.close(); 
        media_path = f.getAbsolutePath(); 
        if(dm.densityDpi>=200) { 
         contactimg.setImageBitmap(getRoundedCornerBitmap(getResizedBitmap(bmp, 72, 72), 72)); 
        } else if(dm.densityDpi>130 && dm.densityDpi<200) { 
         contactimg.setImageBitmap(getRoundedCornerBitmap(getResizedBitmap(bmp, 48, 48), 48)); 
        } else { 
         contactimg.setImageBitmap(getRoundedCornerBitmap(getResizedBitmap(bmp, 32, 32), 32)); 
        }        
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     break ; 
    case REQUEST_SELECT_PHOTO: 
     if(resultCode != 0) { 
      final Cursor c = managedQuery(data.getData(),null,null,null,null); 
      if (c.moveToFirst()) { 
       media_path = c.getString(1); 
       bmp = BitmapFactory.decodeFile(media_path); 
       contactimg.setImageBitmap(getRoundedCornerBitmap(getResizedBitmap(bmp, 48, 48), 48)); 
      } 
     } 
     break; 
} 

我应该这样做,所以随时旋转手机我没有失去imagebutton的位图。

回答

0

看来你似乎正在使用成员变量media_path来存储路径。您需要在onCreate中再次从Bundle中读取路径时更新此成员。否则,当您尝试将其保存在onSaveInstanceState时,它仍然为空(除了当您的开关块已同时运行时)。