从动态创建的EditTexts获取不同活动中的数据

时间:2017-12-12 19:02:20

标签: android dynamic android-edittext textview

对此的任何帮助将不胜感激。我试图将用户输入的数据转换为一个活动中动态生成的EditTexts,并将数据放入另一个活动的TextViews中。虽然我确实在本网站的其他地方发现了类似的问题,但我自己无法解决问题所以我认为我的代码中有些内容会突然出现在某个人身上。请记住,我已经尝试以多种方式实现这一点,因此代码可能很难看,因为我感到沮丧并且不断尝试实现越来越多的工作。

活动A(根据用户输入的数字创建了许多EditTexts,我需要将用户在EditTexts中键入的内容,可能在数组中?并将其移动到活动B。

    final Button submitButton = new Button(this);
    submitButton.setText("Submit");
    submitButton.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v){
            Intent intent = new Intent(ChoiceMaker.this, Randomizer.class);
            startActivity(intent);
            setContentView(R.layout.randomizer);

        }
    });


    btnCreate.setOnClickListener(new View.OnClickListener() {
        public List<EditText> strings;

        @Override
        public void onClick(View v) {
            List<EditText> allEds = null;
            if (edtNoCreate.getText().toString().length() > 0) {
                try {
                    lnrDynamicEditTextHolder.removeAllViews();
                } catch (Throwable e) {
                    e.printStackTrace();
                }

                int length = Integer.parseInt(edtNoCreate.getText().toString());
                EditText editText;
                allEds = new ArrayList<EditText>();

                for (int i = 0; i < length; i++) {
                    editText = new EditText(ChoiceMaker.this);
                    allEds.add(editText);
                    editText.setId(i + 1);
                    editText.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                    editText.setHint("Possible choice " + (i + 1));
                    editText.setTextColor(Color.parseColor("#c0b1ff"));
                    editText.setTextSize(38);
                    lnrDynamicEditTextHolder.addView(editText);


                }


                LinearLayout layout = (LinearLayout) findViewById(R.id.choiceMakerLayout);
                layout.addView(submitButton);
                submitButton.setBackgroundColor(Color.BLUE);

                String[] strings = new String[allEds.size()];

                for(int i=0; i < allEds.size(); i++){
                    strings[i] = allEds.get(i).getText().toString();
                }

                Intent intent = new Intent(ChoiceMaker.this, Randomizer.class);
                intent.putExtra("strings", strings);

            }

        }

    }

活动B

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.randomizer);

    Intent intent = getIntent();
    String[] stringArray = intent.getStringArrayExtra("strings");
    int textViewCount = 10;

    TextView[] textViewArray = new TextView[textViewCount];

    for (int i = 0; i < textViewCount; i++) {
        textViewArray[i] = new TextView(this);
        textViewArray[i].setText(stringArray);



}}

1 个答案:

答案 0 :(得分:0)

在这种情况下,您需要使用“标签”跟踪您正在创建的视图, 创建视图时,请执行以下操作,

                for (int i = 0; i < length; i++) {
                    editText = new EditText(ChoiceMaker.this);
                    allEds.add(editText);

                    editText.setTag(i); //mark this step

                    editText.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                    editText.setHint("Possible choice " + (i + 1));
                    editText.setTextColor(Color.parseColor("#c0b1ff"));
                    editText.setTextSize(38);
                    lnrDynamicEditTextHolder.addView(editText);
                }

然后每当你想开始另一个活动来传递数据时,例如:点击按钮,

button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        ArrayList<String> arrayList = new ArrayList<>();
                        for (int i = 0; i < lnrDynamicEditTextHolder.getChildCount(); i++) {
                            arrayList.add(((EditText) lnrDynamicEditTextHolder.findViewWithTag(i)).getText().toString());
                        }

                        Intent intent = new Intent(ChoiceMaker.this, Randomizer.class);
                        intent.putStringArrayListExtra("strings", arrayList);
                        startActivity(intent);
                    }
                });