2011-10-30 90 views
0

我正在使用ImageButton在註冊過程中選擇用戶的配置文件照片。處理縱向和橫向模式之間的旋轉。我想保存背景的狀態。onSaveInstanceState ImageButton的保存狀態

對於EditText上我這樣做

的onSaveInstanceState

EditText FirstName = (EditText) findViewById(R.id.FirstName); 
String firstName = FirstName.getText().toString(); 
savedInstanceState.putString("FirstName", firstName); 

onRestoreInstanceState

String firstName = savedInstanceState.getString("FirstName"); 
    if (firstName != null) { 
     EditText FirstName = (EditText) findViewById(R.id.FirstName); 
     FirstName.setText(firstName); 
    } 

我該怎麼辦了ImageButton的一樣嗎?

我設置了ImageButton的這樣

  Uri selectedImageUri = data.getData(); 

      // MEDIA GALLERY 
      selectedImagePath = getPhotoPath(selectedImageUri); 

      // OI FILE Manager 
      filemanagerstring = selectedImageUri.getPath(); 

      // NOW WE HAVE OUR WANTED STRING 
      if (selectedImagePath != null) { 
       SelectedPhoto = BitmapFactory.decodeFile(selectedImagePath); 
       DisplayPhoto.setImageBitmap(SelectedPhoto); 
       String bans = DisplayPhoto.getBackground().toString(); 
       Log.i("Bakasura", bans); 
      } else{ 
       SelectedPhoto = BitmapFactory.decodeFile(filemanagerstring); 
       DisplayPhoto.setImageBitmap(SelectedPhoto); 
      } 

回答

1

既然你是專門保存狀態來處理旋轉,你最好的選擇這裏是使用onRetainNonConfigurationInstance;包括僅僅這樣一個目的。在活動覆蓋此方法以返回到圖像本身(或含有它的對象):

public Object onRetainNonConfigurationInstance() 
{ 
    return bitmapImage; 
} 

然後準備在onCreate再次接收它:

Object last = getLastNonConfigurationInstance(); 
if(last != null) 
{ 
    DisplayPhoto.setImageBitmap((Bitmap) last); 
} 

注意,在蜂窩和後來,您應該在片段上使用setRetainInstance(),而不是使用此方法;但直到兼容性不早於Honeycomb纔可以接受,這是最好的解決方案。

+0

我正在使用姜麪包..將這項工作? –

+1

當然!它也適用於Honeycomb;但API有一個關於它被棄用的說明,這意味着它可能會盡快停止冰淇淋三明治(儘管我懷疑它會很快死亡) – Greyson

1

可以保存圖像的uri。 和使用

imagebutton.setImageURI(uri); 
1

你不能檢查字符串=
即。

Uri selectedImageUri = data.getData(); 
String selectedImagePath =""; 
selectedImagePath = getPhotoPath(selectedImageUri); 

      if (!selectedImagePath.equalsIgnoreCase("")) { 
       SelectedPhoto = BitmapFactory.decodeFile(selectedImagePath); 
       DisplayPhoto.setImageBitmap(SelectedPhoto); 
       String bans = DisplayPhoto.getBackground().toString(); 
       Log.i("Bakasura", bans); 
      } else{ 
       SelectedPhoto = BitmapFactory.decodeFile(filemanagerstring); 
       DisplayPhoto.setImageBitmap(SelectedPhoto); 
      } 
+1

爵士,這是不正確的。字符串是一個像其他任何對象一樣的對象,與'null'的比較與檢查空字符串不同。 此外,如果'selectedImagePath == null'爲'true',則上面的代碼將失敗,並出現'NullPointerException';哈沙不會。 – Greyson