我刚刚学习了Android编程,但是遇到了问题。
我使用通过编程方式添加的复选框小部件创建活动,或者如果用户触摸添加按钮(tambah),则将添加复选框小部件,问题是如何保存状态活动?
MainActivity.java
public class MainActivity extends Activity {
// Variable Global
int checkId = 0; //CheckBox Id
EditText ex;
TextView noText;
LinearLayout m;
CheckBox check;
CheckBox noCheck;
String dat;
Toast errorNot;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void funcOne(View view) {
/**
* tambah.onClick function
* @param ex - EditText variable
* @param noText - TextView variable used for spacing
* @param m - CheckBox main layout
* @param check - Generated CheckBox widget
* @param noCheck - Toggle between CheckBox and EditText
* @param dat - EditText variable converted to String
* @param errorNot - To display noData error
*/
ex = (EditText)findViewById(R.id.editData);
noText = new TextView(this);
m = (LinearLayout)findViewById(R.id.checkBoxLayout);
check = new CheckBox(this);
noCheck = (CheckBox)findViewById(R.id.noCheck);
dat = ex.getText().toString();
errorNot = Toast.makeText(this, "No input data", Toast.LENGTH_LONG);
// Method
if (dat.length() > 1) {
if (noCheck.isChecked()) {
noText.setText(dat);
m.addView(noText);
} else {
/**
* @param n - New Toast (Only for debugging)
*/
checkId ++;
Toast n = Toast.makeText(this, Integer.toString(checkId), Toast.LENGTH_SHORT);
check.setTag("ch"+checkId);
check.setText(dat + " <WidgetTag " +check.getTag() + ">");
m.addView(check);
n.show();
}
} else {
errorNot.show();
}
}
public void addSpace(View view) {
/**
* space.onClick function
* @param b - Child layout
* @param d - TextView
*/
LinearLayout b = (LinearLayout)findViewById(R.id.checkBoxLayout);
TextView d = new TextView(this);
b.addView(d);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//outState.putBoolean("AstringKey", noCheck);
outState.putString("AStringKey2", dat);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//savedInstanceState.getBoolean("AStringKey");
savedInstanceState.getString("AStringKey2");
}
答案 0 :(得分:1)
每个活动中都有一个onCreate()方法的Bundle参数。您可以在其中保存实例。您可以在onPause()中编写代码,以便在完成活动之前它将存储您的内容。您可以使用相同的捆绑包再次访问它
答案 1 :(得分:0)
有2种方法可以帮助您实现这一目标。
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
// save your data into either or both of the parameters with the put### methods
}
此方法允许您的活动即使在重新启动后仍保留其一些数据。重新启动后要保留的数据可以存储在PersistableBundle
对象中。 Bundle
对象的用法与以下对象相同。
但是,此方法需要在启动此活动时设置一些属性,您可以在android sdk文档中阅读更多内容。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save your data into either or both of the parameters with the put### methods
}
此方法仅允许您的活动保留一些数据,但是重新启动后将清除所有数据。您可以将所有必要的数据存储在Bundle
对象中。前提是您没有销毁活动实例,那么下次您返回此活动时,此捆绑包将被传递到您的onCreate
方法中。
但是代码中的错误是这样;
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//savedInstanceState.getBoolean("AStringKey");
savedInstanceState.getString("AStringKey2");// you are not assigning this to the dat variable.
// it should rather be
dat = savedInstanceState.getString("AStringKey2");
}