从每个动态创建的EditText

时间:2018-11-24 12:28:25

标签: java android xml android-studio

通过“添加”按钮动态创建EditTexts,并且我还使用setId()为它们分配了唯一的ID,现在我要做的是在用户点击按钮时从动态创建的EditTexts中获取值,然后将它们全部存储作为共享首选项 这是代码 谢谢你们

添加的代码

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

}

}

2 个答案:

答案 0 :(得分:1)

您忘记了将EditText添加到列表中,因此“保存”按钮将知道它们并获取其输入。

此后,您需要指定保存按钮(我相信您已经做了,但是在您的代码中看不到它的引用)。

最后只是实现,将其保存在按钮onClick()中(保存在SharedPreferences中)。

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(MainActivity.this);
                ed.setId(ed.generateViewId());
                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() {
            @Override
            public void onClick(View arg0) {
                SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedPref.edit();

                for (EditText ed : allEds) {
                    editor.putString("saved_text_key", ed.getText().toString());
                    editor.commit();
                }

            }
        });
    }

答案 1 :(得分:1)

在创建每个新的EditText时,您会通过setId()生成ID,但是我看不到它们在您的代码中将如何有用。
而是像这样设置EditText的标签:

ed.setTag(allEds.size());

并将其添加到列表中:

allEds.add(ed);

现在,在每个EditText的标记中,您已经在列表中存储了其序数(从零开始),并且要将其值存储在SharedPreferences中时,您可以执行以下操作:

SharedPreferences.Editor editor = getPreferences(Context.MODE_PRIVATE).edit();
editor.putString("key" + et.getTag().toString(), ed.getText().toString());
editor.commit(); 

或使用循环遍历列表中的所有项目:

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

以及其他活动的onCreate()

ArrayList<String> list = (ArrayList<String>) getIntent().getSerializableExtra("Texts");

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);
    }
});