Android 动态创建的EditText';s
我有一个Android 动态创建的EditText';s,android,android-edittext,saving-data,Android,Android Edittext,Saving Data,我有一个按钮,可以动态创建编辑文本。当我运行应用程序时,我在创建它们时没有遇到任何问题,但是当我关闭应用程序并重新打开它时,创建的EditTexts都不会被保存。这是我的密码: public class app extends ActionBarActivity { Button add; LinearLayout linearLayout1; static int createEditText; public static final String
按钮
,可以动态创建编辑文本。当我运行应用程序时,我在创建它们时没有遇到任何问题,但是当我关闭应用程序并重新打开它时,创建的EditText
s都不会被保存。这是我的密码:
public class app extends ActionBarActivity {
Button add;
LinearLayout linearLayout1;
static int createEditText;
public static final String TAG = "MyPrefs" ;
public static final String key1 = "numberOfEditTexts"; //Added this
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app);
linearLayout1 = (LinearLayout)findViewById(R.id.linearLayout1);
add = (Button) findViewById(R.id.add);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createEditText();
}
});
}
public void createEditText() {
Log.i("ET", "ET created");
createEditText++;
if(createEditText > 6) {
Toast.makeText(this, "You have reached the maximum fields",
Toast.LENGTH_LONG).show();
return;
}
LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout1);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
params.setMargins(0, 12, 0, 0);
EditText edtTxt = new EditText(this);
int maxLength = 8;
edtTxt.setHint("New ET1");
edtTxt.setLayoutParams(params);
edtTxt.setBackgroundColor(Color.WHITE);
edtTxt.setInputType(InputType.TYPE_CLASS_DATETIME);
edtTxt.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
InputFilter[] fArray = new InputFilter[1];
fArray[0] = new InputFilter.LengthFilter(maxLength);
edtTxt.setFilters(fArray);
edtTxt.setGravity(Gravity.CENTER);
layout.addView(edtTxt);
edtTxt.setId(createEditText);
}
@Override //Added this
protected void onPause() {
super.onPause();
Log.i("Pause", "onPause()");
System.out.println("EditText = " + createEditText);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(key1, createEditText);
editor.commit();
}
@Override //Added this
protected void onResume(){
super.onResume();
Log.i("Resume", "onResume()");
System.out.println("EditText = " + createEditText);
sharedPreferences.getInt(key1, createEditText);
}
你应该先把这两个留在课堂上。接下来,在类中创建一个SharedReference
对象
SharedPreferences sharedPreferences;
在onCreate()
方法中,初始化以下内容:
sharedPreferences = getSharedPreferences(TAG, Context.MODE_PRIVATE);
您可以通过按下按钮或使用onPause
方法为其添加值
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putInt(key1, createEditText);
editor.commit();
要在下一次开始时检索此值(当您要显示离开程序的EditText
s的数量时),请执行以下操作:
storedNumber=editor.getInt(key1,0);
类似地,如果要存储EditText
s的内容,可以将它们存储在相同的SharedReference
对象中
编辑
@Override //Added this
protected void onResume() {
super.onResume();
Log.i("Resume", "onResume()");
System.out.println("EditText = " + createEditText);
//store the value in an integer.
int prevVal = sharedPreferences.getInt(key1, 0);
// now use this in a for loop.
for (int i=0; i<prevVal; i++)
createEditText();
}
@Override//添加了此
受保护的void onResume(){
super.onResume();
Log.i(“Resume”、“onResume()”);
System.out.println(“EditText=“+createEditText”);
//将值存储在整数中。
intprevval=SharedReferences.getInt(键1,0);
//现在在for循环中使用它。
对于(int i=0;ii如果你想在活动的不同运行之间保存数据,你可能想阅读有关SharedReferences
嘿,@Anindya Dutta,我对我的代码进行了更改,但它仍然没有保存我创建的编辑文本。我不知道,可能我调用的共享首选项是错误的。我根据你的建议对帖子进行了更改建议。你能看一看,看看我哪里出了问题吗?我可以使用共享prefs保存我在XML中创建的编辑文本,但我一直在尝试保存动态创建的编辑文本。谢谢你的帮助。你需要做两个修改。1.SharedReferences.getInt(键1,createEditText);
应该保存在int
中,因为它返回给您EditText
框的数量。2.您应该创建一个for循环或调用createEditText()
那么多次的东西(您在1中得到的值)。否则,即使您得到了该值,您如何填充布局?:)好吧,我有点困惑。SharedReferences.getInt(键1,createEditText);
是否已经被保存为int
?我在代码中添加了for循环。如果可能的话,如果你能展示你想说的话,你可以吗?谢谢SharedReferences.getInt(键1,createEditText);
意味着将key1
中的值赋给一个整数,如果键key1
不存在,则在其中存储一个定义的默认值,这是第二个参数。在您的情况下,这不会被保存。我已经编辑了我的帖子,并添加了我的意思所需的代码。哇,非常感谢。它工作得非常好。谢谢您的帮助我会提供帮助。为了在创建的Edittext
中保存数据,我可以将其保存在SharedReferences
中?我想我可以自己解决这个问题。再次感谢。我还查看了你的个人资料,并访问了你的博客,你做了一些非常好的草图。写得也非常好。@Anidya Dutta
@Override //Added this
protected void onResume() {
super.onResume();
Log.i("Resume", "onResume()");
System.out.println("EditText = " + createEditText);
//store the value in an integer.
int prevVal = sharedPreferences.getInt(key1, 0);
// now use this in a for loop.
for (int i=0; i<prevVal; i++)
createEditText();
}