动态创建的 EditText 的

Dynamically created EditText's

我有一个 Button 可以动态创建 EditText。当我 运行 应用程序创建它们时我没有遇到任何问题,但是当我关闭应用程序并重新打开它时,创建的 EditText 中的 none 被保存。这是我的代码:

 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);
  }
public static final String TAG = "MyPrefs" ;
public static final String key1 = "numberOfEditTexts";

你应该先把这两个放在你的 class 里。接下来,在 class.

中创建一个 SharedPreference 对象
SharedPreferences sharedPreferences;

在你的 onCreate() 方法中,初始化这个:

sharedPreferences = getSharedPreferences(TAG, Context.MODE_PRIVATE);

您可以通过按下按钮或使用 onPause 方法将值添加到此。

SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putInt(key1, createEditText);
editor.commit();

要在下一次开始时检索此值,当您想显示离开程序的 EditText 的数量时,请执行以下操作:

storedNumber=editor.getInt(key1,0);

同样,如果要存储 EditText 的内容,可以将它们存储在同一个 SharedPreference 对象中。

编辑

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

 }

您添加的 for 循环(运行 从 0 到 1)不是必需的。