【问题标题】:Get Data From Dynamically Created EditTexts In A Different Activity从不同活动中动态创建的 EditText 获取数据
【发布时间】:2018-05-26 13:29:43
【问题描述】:

对此的任何帮助将不胜感激。我正在尝试将用户输入的数据输入到一个活动中动态生成的 EditTexts 中,并将数据放入另一个活动中的 TextViews 中。虽然我确实在这个网站的其他地方发现了类似的问题,但我自己无法解决问题,所以我认为我的代码中有一些东西会跳出来。请记住,我已尝试通过多种方式来实现这一点,因此代码可能很丑陋,因为我感到沮丧并不断尝试实现更多以使其正常工作。

活动 A(根据用户输入的数字创建了许多 EditText,我需要获取用户在 EditText 中键入的内容,也许在一个数组中????并将其移至活动 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);



}}

【问题讨论】:

  • 如果有任何帮助,我会收到空​​指针错误,当我调试时,它会将数组显示为空。我相信数据可能永远不会进入 Activity A 中的数组。

标签: android dynamic android-edittext textview


【解决方案1】:

在这种情况下,您需要使用“标签”跟踪您正在创建的视图, 在创建视图时,如下所示,

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

【讨论】:

    猜你喜欢
    • 2011-08-20
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    相关资源
    最近更新 更多