Получите данные от каждого динамически созданного EditText - PullRequest
0 голосов
/ 24 ноября 2018

Динамически создаваемые EditTexts с помощью кнопки Добавить, а также я назначил им уникальные идентификаторы с помощью setId (). Теперь я хочу получить значения из динамически созданных EditTexts, когда пользователь нажимает кнопку, а затем сохранить их все.as 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(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 голосов
/ 24 ноября 2018

При создании каждого нового EditText вы генерируете идентификаторы на setId(), но я не понимаю, как они будут полезны в вашем коде.Вместо этого установите тег 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();

Таким образом, вы сохранили все текстовые значения EditTexts с такими клавишами, как:

"key0", "key1", "key2",... 

Edit Вы хотите открыть другое действие и передать ему список:

    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);
    }
});  
0 голосов
/ 24 ноября 2018

Вы забыли добавить 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();
                }

            }
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...