0

我正在创建一个应用程序,在其中我使用 ID 号动态创建一些 EditTexts。

我想从 EditTexts 传递信息,所以我尝试用这些创建一个 EditText 数组,然后使用 .getText().toString() 将它们保存在一个字符串数组中,我想将它传递给下一个活动。

似乎它不会在第二个代码部分中正确创建“editArray []”。

提前致谢。

这是我的代码 (EnterNames.java) - 创建 EditTexts -> 成功

protected void NumberOfEditText()
{
    View VertLayout = (LinearLayout) findViewById(R.id.VertLayout);

    String SpinValue = getIntent().getExtras().getString("SpinValue");
    int intSpinValue = Integer.valueOf(SpinValue);

    editTextCount = intSpinValue;
    EditText[] editTextArray = new EditText[editTextCount];

    for (int i = 0; i < editTextCount; i++)
    {
        String Name = "Name " + (i+1);
        editTextArray[i] = new EditText(this);
        editTextArray[i].setId(i+1000);
        editTextArray[i].setText(Name);
        editTextArray[i].setTextSize(20);
        editTextArray[i].setFilters( new InputFilter[] { new InputFilter.LengthFilter(15) } );
        editTextArray[i].setSelectAllOnFocus(true);
        editTextArray[i].setSingleLine(true);
        editTextArray[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
        ((LinearLayout) VertLayout).addView(editTextArray[i]);
    }
}

第二个代码 (EnterNames.java) - 将数据传递给下一个活动 -> 失败。通过测试我认为问题是for循环(editArray返回null)

public void Go(View view)
{
    setContentView(R.layout.activity_enter_names);

    String NameArray [] = new String [editTextCount];
    EditText editArray [] = new EditText [editTextCount];

    Intent intent = new Intent(this, RandomGeneration.class);

    for (int i = 0; i < editTextCount; i++)                 
    {                                                       
        editArray[i] = (EditText) findViewById(i+1000);
    }

    for (int i = 0; i < editTextCount; i++)
    {
        NameArray[i] = editArray[i].getText().toString();
    }

    Bundle extras = new Bundle();

    extras.putInt("NumberofNames", editTextCount);
    extras.putStringArray("NameArray", NameArray);

    intent.putExtras(extras);

    startActivity(intent);
}
4

2 回答 2

0

为什么要调用 setContentView(R.layout.activity_enter_names); 在公共无效Go(查看视图)?您覆盖了之前添加了 EditText 视图的活动布局,并且您的所有 findById() 都返回 null。

如果您删除 setContentView(R.layout.activity_enter_names); 您的代码应该可以工作 来自 Go 函数。

setContentView(R.layout.activity_enter_names); 应该在活动 onCreate 函数中单次调用。

于 2013-07-11T14:05:15.517 回答
0

根据Activity.findViewById() 文档,此方法将在您的 XML 中搜索视图,而不是在 Java 中添加的视图中。

做你想做的简单方法:

class EnterNames extends Activity {
    private int editTextCount;
    private EditText[] editTextArray;

    protected void NumberOfEditText() {
        LinearLayout vertLayout = (LinearLayout) findViewById(R.id.VertLayout);

        editTextCount = Integer.valueOf(getIntent().getExtras().getString("SpinValue"));
        editTextArray = new EditText[editTextCount];

        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        for (int i = 0; i < editTextCount; i++) {
            String Name = "Name " + (i+1);
            editTextArray[i] = new EditText(this);
            editTextArray[i].setText(Name);
            editTextArray[i].setTextSize(20);
            editTextArray[i].setFilters( new InputFilter[] { new InputFilter.LengthFilter(15) } );
            editTextArray[i].setSelectAllOnFocus(true);
            editTextArray[i].setSingleLine(true);
            editTextArray[i].setLayoutParams(params);
            vertLayout.addView(editTextArray[i]);
        }
    }

    […]

    public void Go(View view)
    {
        // This will delete views added to your LinearLayout, don't use it!
        //setContentView(R.layout.activity_enter_names);

        String nameArray[] = new String[editTextCount];

        for (int i = 0; i < editTextCount; i++) {
            nameArray[i] = editArray[i].getText().toString();
        }

        Bundle extras = new Bundle();
        extras.putInt("NumberofNames", editTextCount);
        extras.putStringArray("NameArray", nameArray);

        Intent intent = new Intent(this, RandomGeneration.class);
        intent.putExtras(extras);
        startActivity(intent);
    }
}
于 2013-07-11T14:56:54.393 回答