Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从每个动态创建的EditText获取数据_Java_Android_Xml_Android Studio - Fatal编程技术网

Java 从每个动态创建的EditText获取数据

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

通过Add按钮动态创建EditText,我还使用setId()为它们分配了唯一的ID,现在我要做的是,当用户点击按钮时,从动态创建的EditText中获取值,然后将它们全部存储为SharedReference 这是密码 谢谢你们

添加代码

    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)
然后将此捆绑包插入到<