Android 现有EditText的EditText数组赢得';我不能被宣布是对的

Android 现有EditText的EditText数组赢得';我不能被宣布是对的,android,eclipse,android-edittext,Android,Eclipse,Android Edittext,我正在创建一个应用程序,在其中我使用ID号动态创建一些EditText 我想传递来自EditText的信息,所以我尝试用这些信息创建EditText数组,然后使用.getText().toString()将它们保存在字符串数组中,我想传递给下一个活动 似乎无法在第二个代码部分中正确创建“editArray[]” 提前谢谢 下面是我的代码(EnterNames.java)-创建EditText->Successful protected void NumberOfEditText() {

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

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

似乎无法在第二个代码部分中正确创建“editArray[]”

提前谢谢

下面是我的代码(EnterNames.java)-创建EditText->Successful

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]);
    }
}
受保护的void NumberOfEditText()
{
View VertLayout=(LinearLayout)findViewById(R.id.VertLayout);
字符串SpinValue=getIntent().getExtras().getString(“SpinValue”);
int intSpinValue=整数.valueOf(SpinValue);
editTextCount=intSpinValue;
EditText[]editTextArray=新的EditText[editTextCount];
对于(int i=0;i
第二个代码(EnterNames.java)-将数据传递到下一个活动->失败。 通过测试,我认为问题在于for循环(editArray返回null)

public void Go(查看)
{
setContentView(R.layout.activity\u输入\u名称);
字符串名称数组[]=新字符串[editTextCount];
EditText editArray[]=新的EditText[editTextCount];
Intent Intent=新的Intent(这个,RandomGeneration.class);
对于(int i=0;i
为什么调用setContentView(R.layout.activity\u输入\u名称);在公共空间中是否继续(查看)?您可以覆盖以前添加了EditText视图的Activities布局,并且所有findById()都返回null

如果删除setContentView(R.layout.activity\u输入\u名称),代码应该可以工作;从Go函数开始


setContentView(R.layout.activity\u输入\u名称);应在Activities onCreate函数中一次性调用。

根据
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);
    }
}
类EnterNames扩展活动{
私有整数编辑文本计数;
私有EditText[]editTextArray;
受保护的void NumberOfEditText(){
LinearLayout vertLayout=(LinearLayout)findViewById(R.id.vertLayout);
editTextCount=Integer.valueOf(getIntent().getExtras().getString(“SpinValue”));
editTextArray=新的EditText[editTextCount];
LayoutParams params=新的LayoutParams(LayoutParams.WRAP\u内容,LayoutParams.WRAP\u内容);
对于(int i=0;i
为什么不干脆将
editTextArray
声明为类变量,这样就不必在
Go()
方法中重新生成
editArray
。。很好的解决方案。不过,我有一个快速的问题:在这个数组声明为类变量后,如何声明它的大小?(我从过去的活动中收到大小的值)。简单:声明EditText[]时不要初始化它。我要做一个完整的回答,评论太短,无法解释。回答得很好。我要用这个:)谢谢!
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);
    }
}