Java 从每个动态创建的EditText获取数据
通过Add按钮动态创建EditText,我还使用setId()为它们分配了唯一的ID,现在我要做的是,当用户点击按钮时,从动态创建的EditText中获取值,然后将它们全部存储为SharedReference 这是密码 谢谢你们 添加代码Java 从每个动态创建的EditText获取数据,java,android,xml,android-studio,Java,Android,Xml,Android Studio,通过Add按钮动态创建EditText,我还使用setId()为它们分配了唯一的ID,现在我要做的是,当用户点击按钮时,从动态创建的EditText中获取值,然后将它们全部存储为SharedReference 这是密码 谢谢你们 添加代码 List<EditText> allEds = new ArrayList<EditText>(); Button btnSave, btnAdd; @Override protected void onCreate(Bund
List<EditText> allEds = new ArrayList<EditText>();
Button btnSave, btnAdd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final LinearLayout layoutmain = (LinearLayout) findViewById(R.id.layoutmain);
btnAdd = (Button) findViewById(R.id.btnadd);
btnSave = (Button) findViewById(R.id.btnsave);
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
EditText ed = new EditText(ActivityOptions.this);
ed.setId(ed.generateViewId());
ed.setTag(allEds.size());
ed.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
layoutmain.addView(ed);
// Add also to the allEds
allEds.add(ed);
}
});
btnSave.setOnClickListener(new View.OnClickListener() {
EditText ed = new EditText(ActivityOptions.this);
@Override
public void onClick(View arg0) {
SharedPreferences.Editor editor = getPreferences(Context.MODE_PRIVATE).edit();
editor.putString("key" + ed.getTag().toString(), ed.getText().toString());
for (EditText ed : allEds) {
editor.putString("key" + ed.getTag().toString(), ed.getText().toString());
}
editor.commit();
}
});
Intent intent = new Intent(this, MainActivity.class);
ArrayList<String> allTexts = new ArrayList<>();
for (EditText e : allEds) {
allTexts.add(e.getText().toString());
}
intent.putExtra("Text", (Serializable) allTexts);
}
List allEds=new ArrayList();
按钮btnSave,btnAdd;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
最终LinearLayout layoutmain=(LinearLayout)findViewById(R.id.layoutmain);
btnAdd=(按钮)findviewbyd(R.id.btnAdd);
btnSave=(按钮)findviewbyd(R.id.btnSave);
btnAdd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
EditText ed=新的EditText(ActivityOptions.this);
ed.setId(ed.generateViewId());
ed.setTag(allEds.size());
ed.setLayoutParams(新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_父级,
LinearLayout.LayoutParams.WRAP_内容);
layoutmain.addView(ed);
//再加上小巷
添加(ed);
}
});
btnSave.setOnClickListener(新视图.OnClickListener(){
EditText ed=新的EditText(ActivityOptions.this);
@凌驾
公共void onClick(视图arg0){
SharedReferences.Editor=getPreferences(Context.MODE_PRIVATE.edit();
putString(“key”+ed.getTag().toString(),ed.getText().toString());
for(编辑文本:alled){
putString(“key”+ed.getTag().toString(),ed.getText().toString());
}
commit();
}
});
意向意向=新意向(此,MainActivity.class);
ArrayList AllText=新的ArrayList();
用于(编辑文本e:Alled){
添加(例如getText().toString());
}
intent.putExtra(“文本”,(可序列化)所有文本);
}
}您忘了将
编辑文本添加到列表中,因此“保存”按钮将了解它们并获取它们的输入
之后,您需要指定保存按钮(我相信您已经指定了,但我在代码中看不到它的引用)
最后,只需在其onClick()
(保存在SharedReferences
)中实现保存按钮的逻辑
List allEds=new ArrayList();
按钮btnSave,btnAdd;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
最终LinearLayout layoutmain=(LinearLayout)findViewById(R.id.layoutmain);
btnAdd=(按钮)findviewbyd(R.id.btnAdd);
btnSave=(按钮)findviewbyd(R.id.btnSave);
btnadd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
EditText ed=新的EditText(MainActivity.this);
ed.setId(ed.generateViewId());
ed.setLayoutParams(新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_父级,
LinearLayout.LayoutParams.WRAP_内容);
layoutmain.addView(ed);
//再加上小巷
添加(ed);
}
});
btnSave.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
SharedPreferences sharedPref=getActivity().getPreferences(Context.MODE\u PRIVATE);
SharedPreferences.Editor=sharedPref.edit();
for(编辑文本:alled){
putString(“保存的文本密钥”,ed.getText().toString());
commit();
}
}
});
}
在创建每个新的EditText
时,您可以通过setId()
生成ID,但我看不出这些ID在您的代码中有什么用处
改为如下设置EditText
的标记:
ed.setTag(allEds.size());
并将其添加到列表中:
allEds.add(ed);
for (EditText ed : allEds) {
editor.putString("key" + et.getTag().toString(), ed.getText().toString());
}
editor.commit();
现在,在每个EditText
的标记中,您已经在列表中存储了它的序号(从零开始),当您想在SharedReferences
中存储它的值时,您可以执行以下操作:
SharedPreferences.Editor editor = getPreferences(Context.MODE_PRIVATE).edit();
editor.putString("key" + et.getTag().toString(), ed.getText().toString());
editor.commit();
或者使用循环遍历列表中的所有项目:
allEds.add(ed);
for (EditText ed : allEds) {
editor.putString("key" + et.getTag().toString(), ed.getText().toString());
}
editor.commit();
通过这种方式,您可以使用如下键存储EditText的所有文本值:
"key0", "key1", "key2",...
编辑
如果要打开另一个活动并将列表传递给它:
Intent intent = new Intent(this, AnotherActivity.class);
ArrayList<String> allTexts = new ArrayList<>();
for (EditText e : allEds) {
allTexts.add(e.getText().toString())
}
intent.putExtra("Text", (Serializable) allTexts);
Edit2
用以下代码替换btnSave.setOnClickListener()中的代码和以下行:
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
SharedPreferences.Editor editor = getPreferences(Context.MODE_PRIVATE).edit();
for (EditText ed : allEds) {
editor.putString("key" + ed.getTag().toString(), ed.getText().toString());
}
editor.commit();
Intent intent = new Intent(this, MainActivity.class);
ArrayList<String> allTexts = new ArrayList<>();
for (EditText e : allEds) {
allTexts.add(e.getText().toString());
}
intent.putExtra("Text", (Serializable) allTexts);
startActivity(intent);
}
});
btnSave.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
SharedReferences.Editor=getPreferences(Context.MODE_PRIVATE.edit();
for(编辑文本:alled){
putString(“key”+ed.getTag().toString(),ed.getText().toString());
}
commit();
意向意向=新意向(此,MainActivity.class);
ArrayList AllText=新的ArrayList();
用于(编辑文本e:Alled){
添加(例如getText().toString());
}
intent.putExtra(“文本”,(可序列化)所有文本);
星触觉(意向);
}
});
mark as answer works bro.那么如何将数据作为ArrayList传递给其他活动,否则我将创建新的问题?不,您不必创建其他问题为了将ArrayList从一个活动传递到另一个活动,ArrayList中包含的元素类型必须实现Parcelable
接口。然后创建一个包
,调用buncle.putParcellableArrayList(yourraylist)
然后将此捆绑包插入到<