动态创建的 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)不是必需的。
我有一个 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)不是必需的。