尝试添加editText时,下一个活动已关闭

时间:2013-06-12 03:01:43

标签: android

我想动态添加editText。但是当我点击按钮时,下一个活动会被强制关闭。它在日志中给了我一个nullpointer异常。

添加cotrol时,是否需要在xml文件中控制初始化?

package com.example.snooder;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    EditText ed1;
    Button btn1;

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

        ed1 = (EditText) findViewById(R.id.editText1);
        btn1 =(Button) findViewById(R.id.button1);

        btn1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent i = new Intent(MainActivity.this,players.class);
                i.putExtra("name",ed1.getText().toString());
                startActivity(i);       
            }
        });
    }
}

players.java

package com.example.snooder;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.LinearLayout;

public class players extends Activity {

    LinearLayout player_layout;
    Bundle b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.players);

        b = getIntent().getExtras();
        String resStr = b.getString("name");
        player_layout = (LinearLayout) findViewById(R.id.player_layout);

        EditText[] ed1 = new EditText[Integer.parseInt(resStr)];

        for(int i=1;i<=Integer.parseInt(resStr);i++)
        {
            ed1[i] = new EditText(this);
            player_layout.addView(ed1[i]);
            ed1[i].setId(i);
            ed1[i].setHint("enter player's name");
            ed1[i].setHeight(50);
            ed1[i].setWidth(500);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

这是关于创建一个EditText s的数组。当你这样做时:

EditText[] ed1 = new EditText[Integer.parseInt(resStr)];

然后你有一个非null(在你的情况下是ed1)数组,但是它的每个成员都是null,所以当你想在布局中添加一个空视图时,NPP就会出现。你必须初始化成员使用它们之前的数组。例如:

for(int i=1;i<=Integer.parseInt(resStr);i++)
    {

        ed1[i] = new EditText(this);
        .
        .
        .
    }