即使在android中导航到不同的活动后,如何保持复选框的状态?
我是Android开发的新手。 让我解释一下我的问题。 我的主要活动中有一个复选框和一个按钮。当我选中(即启用)我的复选框并单击其下方的“我的按钮”时,我将移动到另一个活动,当我在第二个活动中单击按钮时,我将返回到我的主要活动。我的问题是,当我返回时,复选框仍处于未选中或禁用状态。即使从第二次活动回来,我该如何保持其状态?请帮忙 XML布局的复选框部分是:即使在android中导航到不同的活动后,如何保持复选框的状态?,android,android-activity,checkbox,state,Android,Android Activity,Checkbox,State,我是Android开发的新手。 让我解释一下我的问题。 我的主要活动中有一个复选框和一个按钮。当我选中(即启用)我的复选框并单击其下方的“我的按钮”时,我将移动到另一个活动,当我在第二个活动中单击按钮时,我将返回到我的主要活动。我的问题是,当我返回时,复选框仍处于未选中或禁用状态。即使从第二次活动回来,我该如何保持其状态?请帮忙 XML布局的复选框部分是: <CheckBox android:id="@+id/ckBxAll" android:layout_width="w
<CheckBox
android:id="@+id/ckBxAll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ON" />
我的第二项活动:
public class ComposeMessage extends Activity{
Button SaveSMS_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.composemessage);
SaveSMS_btn=(Button)findViewById(R.id.btnSave);
SaveSMS_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent gotoHome=new Intent(getApplicationContext(),BlockTestActivity.class);
Bundle BundleToCarryMessage = new Bundle();
EditText EnterSMS_edt=(EditText)findViewById(R.id.edtEnterSMS);
BundleToCarryMessage.putString("Message", EnterSMS_edt.getText().toString());
gotoHome.putExtras(BundleToCarryMessage);
startActivity(gotoHome);
}
});
}
}
第二个活动中使用的XML文件:
Public class TestActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater mInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View mMainView = mInflater.inflate(R.layout.main, null);
setContentView(mMainView);
Enable_chkbox = (CheckBox)mMainView.findViewById(R.id.ckBxAll);
if(b_onResume==true)
{
Enable_chkbox.setChecked(b_onResume);
}
Enable_chkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
//do something
});//Enable_chkbox
Compose_btn=(Button)findViewById(R.id.btnCompose);
Compose_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent gotoComposeMessage=new Intent(TestActivity.this,ComposeMessage.class);
startActivity(gotoComposeMessage);
}
});
}
@Override
protected void onResume() {
super.onResume();
b_onResume= Enable_chkbox.isChecked();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(myreceiver);
this.finish();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("Enable_chkbox",true);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
boolean myBoolean = savedInstanceState.getBoolean("Enable_chkbox");
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/edtEnterSMS"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine" >
<requestFocus />
</EditText>
<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save" />
</LinearLayout>
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putBoolean("MyCheckBox", enable);
super.onSaveInstanceState(savedInstanceState);
}
使用startActivityforResult切换到第二个活动。使用此选项切换时,您没有完成当前活动,因此它存储了活动的状态。出于所有一般目的,您必须在离开活动时保存复选框和单选按钮的状态,并在返回活动时还原它们。为此,我们通常使用共享首选项。我们在
onPause()
方法中保存按钮的状态,并在onResume()方法中恢复状态。
要使用共享首选项,您可以执行以下操作:
SharedPreferences prefs = this.getSharedPreferences(
"com.example.app", Context.MODE_PRIVATE);
要阅读首选项,请执行以下操作:
String dateTimeKey = "com.example.app.datetime";
// use a default value using new Date()
long l = prefs.getLong(dateTimeKey, new Date().getTime());
编辑和保存首选项的步骤
Date dt = getSomeDate();
prefs.edit().putLong(dateTimeKey, dt.getTime()).commit();
有关更多示例,请参见。
用正确的方法(onPause和onResume)输入上述代码后,您可以恢复按钮的状态。还有另一种方法。
您需要重写onSaveInstanceState(Bundle savedInstanceState),并将要更改的应用程序状态值写入Bundle参数,如下所示:
下一个代码用于在移动到第二个活动之前保存复选框状态:
Public class TestActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater mInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View mMainView = mInflater.inflate(R.layout.main, null);
setContentView(mMainView);
Enable_chkbox = (CheckBox)mMainView.findViewById(R.id.ckBxAll);
if(b_onResume==true)
{
Enable_chkbox.setChecked(b_onResume);
}
Enable_chkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
//do something
});//Enable_chkbox
Compose_btn=(Button)findViewById(R.id.btnCompose);
Compose_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent gotoComposeMessage=new Intent(TestActivity.this,ComposeMessage.class);
startActivity(gotoComposeMessage);
}
});
}
@Override
protected void onResume() {
super.onResume();
b_onResume= Enable_chkbox.isChecked();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(myreceiver);
this.finish();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("Enable_chkbox",true);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
boolean myBoolean = savedInstanceState.getBoolean("Enable_chkbox");
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/edtEnterSMS"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine" >
<requestFocus />
</EditText>
<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save" />
</LinearLayout>
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putBoolean("MyCheckBox", enable);
super.onSaveInstanceState(savedInstanceState);
}
这就是恢复复选框状态的时间:
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
boolean myBoolean = savedInstanceState.getBoolean("MyCheckBox");
}
编辑:
public class TestActivity extends Activity implements OnCheckedChangeListener, OnClickListener {
private CheckBox Enable_chkbox;
private View mMainView;
private Button Compose_btn;
private boolean myBoolean = false;;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater mInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
mMainView = mInflater.inflate(R.layout.main, null);
setContentView(mMainView);
initView();
}
private void initView(){
Enable_chkbox = (CheckBox)mMainView.findViewById(R.id.ckBxAll);
Enable_chkbox.setOnCheckedChangeListener(this);
Compose_btn=(Button)mMainView.findViewById(R.id.btnCompose);
Compose_btn.setOnClickListener(this);
}
@Override
protected void onResume() {
super.onResume();
Enable_chkbox.setChecked(myBoolean);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("Enable_chkbox", Enable_chkbox.isChecked());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
myBoolean = savedInstanceState.getBoolean("Enable_chkbox");
}
@Override
public void onClick(View arg0) {
//do something
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//do something
}
}
"
希望能有所帮助。告诉我你是如何在活动之间导航的。嗨,拉贾雷迪,我只使用意图导航。。