2015-06-07 3 views
0

У меня есть Button, который динамически создает EditText s. У меня нет проблем с созданием их при запуске приложения, но ни один из созданных EditText s не сохраняется при закрытии приложения и его повторном открытии. Вот мой код:Динамически созданный 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); 
    } 
+0

Если вы хотите сохранить данные, сохраненные между различными запусками активности, вы можете прочитать о 'SharedPreferences' [здесь] (http://developer.android.com/reference/android/content/SharedPreferences.html) –

ответ

0
public static final String TAG = "MyPrefs" ; 
public static final String key1 = "numberOfEditTexts"; 

Вы должны держать эти два в своем классе первым. Затем создайте объект SharedPreference в классе.

SharedPreferences sharedPreferences; 

В вашем методе onCreate() инициализировать это:

sharedPreferences = getSharedPreferences(TAG, Context.MODE_PRIVATE); 

И вы можете добавить значение для этого либо на вашем нажатии кнопки или на вашем методе .

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

Чтобы получить это значение в начале следующего раза, когда вы хотите, чтобы отобразить количество EditText с, что вы оставили программу, сделайте следующее:

storedNumber=editor.getInt(key1,0); 

Точно так же, если вы хотите для хранения содержимого EditText s, вы можете сохранить их в том же 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) не является необходимым.

+0

Эй, @Anindya Dutta, я внес изменения в свой код, но он по-прежнему не сохраняет мои созданные Edit Text. Я не знаю, может быть, я неправильно называю общие привилегии. Я внес изменения в сообщение в соответствии с вашими предложениями. Не могли бы вы взглянуть на него и посмотреть, где я ошибаюсь? Я могу сохранить Редактирование текста, который я создал в XML, используя общие префы, но я просто застрял на попытке сохранить созданный Редактируемый текст, который динамически создается. Спасибо за помощь. – jj7

+0

Вам нужно сделать две модификации. 1. 'sharedPreferences.getInt (key1, createEditText);' должен быть сохранен в 'int', так как он возвращает вам количество полей EditText. 2. Вы должны сделать цикл for или что-то, чтобы вызвать 'createEditText()', что много раз (значение, которое вы получаете в 1.). В противном случае, даже если вы получите значение, как бы вы заполнили макет? :) –

+0

Хорошо, я немного смущен. Это не 'sharedPreferences.getInt (key1, createEditText);' уже сохраняется как 'int'? Я добавил цикл for к моему коду. Все в порядке с вами, если вы можете показать, что вы пытаетесь сказать, если это возможно? Спасибо – jj7

Смежные вопросы