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();

 }