2011-04-05 81 views
1

我正在使用佈局xml上的複選框。複選框從縱向到橫向模式的句柄方向

<CheckBox android:id="@+id/chkbox" 
android:checked="false" android:button="@drawable/ic_uncheck_img"> 

該複選框被默認設置爲「假」 &一個圖像被添加爲未選中按鈕。

private CheckBox mCheck= null; 

public void onCreate(Bundle savedInstanceState) { 

mCheck= (CheckBox) findViewById(R.id.chkbox); 
     mCheck.setChecked(false); 
     mCheck.setButtonDrawable(R.drawable.ic_uncheck_img); 


} 

public void onClick(View view) { 

      if (view.getId() == R.id.chkbox) { 
       if (mCheck.isChecked()) 
        mCheck.setButtonDrawable(R.drawable.ic_check_img); 
       else 
        mCheck.setButtonDrawable(R.drawable.ic_uncheck_img); 
} 

在onClick()中,當用戶點擊複選框時,圖像從取消選中變爲複選。用戶在肖像模式下這樣做。

當用戶將方向改爲設備的橫向模式時,檢查消失&顯示取消選中的圖像。當方向從縱向變爲橫向時,複選框的狀態不會保留。

請提供關於如何維持複選框狀態的輸入,即使方向改變。

回答

2

發生這種情況的原因是,默認情況下,方向更改導致活動重新啓動(即,您的當前實例已被銷燬,並且使用onCreate()創建了該活動的新實例)。

我可以考慮一些方法來完成你所需要的。

1)使用onSaveInstanceState包保存複選框的狀態,並在onCreate()中恢復它。 (請記住處理這兩種情況:第一次啓動活動時,savedInstanceState軟件包將不存在)。

節省狀態:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    savedInstanceState.putBoolean("CHECKBOX_STATE", mCheckbox.isChecked()); 
    super.onSaveInstanceState(savedInstanceState); 
} 

在的onCreate回收它:

if(savedInstanceState != null) { 
    mCheckBox.setChecked(savedInstanceState.getBoolean("CHECKBOX_STATE")); 
} 

2)在AndroidManifest,設置屬性 「機器人:configChanges =」 取向 「」 在所討論的活性。這會導致方向更改時不重新啓動。你想this--

<activity android:name=".TestActivity" android:configChanges="orientation|keyboardHidden"/> 

該活動絕對

-1

寫在你的清單file..in它將作品..

+0

這只是阻止Android的從方向變化重新創建活動。但是方向改變並不是觸發完整的Activity重啓的唯一方式。來自[Android文檔](https://developer.android.com/guide/topics/resources/runtime-changes.html)的注意事項: 「自行處理配置更改可能會使其使用替代資源變得更加困難,因爲系統不會自動將它們應用於您,當您必須避免由於配置更改而重新啓動並且不推薦用於大多數應用程序時,應將此技術視爲最後一招。「 – 2017-12-25 06:32:26