FindViewById返回null EditText

时间:2015-03-23 14:06:52

标签: android

我遇到了findViewById()函数的常见问题,它返回null:

<EditText
    android:id="@+id/nameText"
/>

<Button
    android:text="Save"
    android:onClick="buttonClick1"
/>

</TableRow
    android:onClick="buttonClick1"
/>

Activity1.java:

public class Activity1 extends ActionBarActivity {

    public void buttonClick1(View view) {
        setContentView(view);
        EditText nameText = (EditText) view.findViewById(R.id.nameText);
        EditText lastNameText = (EditText) view.findViewById(R.id.lastNameText);
        EditText indexNumberText = (EditText) view.findViewById(R.id.indexNumberText);

        Log.d(">>>> ", nameText.getText().toString());
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_activity1);
        }
    }
}

在buttonClick1()中,findViewById()返回 null 。请解释原因?

3 个答案:

答案 0 :(得分:0)

setContentView(view);方法

中删除buttonClick1

并通过删除view.

以这种方式初始化所有textview
EditText nameText = (EditText) findViewById(R.id.nameText);
    EditText lastNameText = (EditText) findViewById(R.id.lastNameText);
    EditText indexNumberText = (EditText) findViewById(R.id.indexNumberText);

通过向控件提供heightwidth来正确初始化xml中的控件

答案 1 :(得分:0)

尝试用以下代码替换您的代码:

  public class Activity1 extends ActionBarActivity {



    @
    Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity1);

        EditText nameText = (EditText) findViewById(R.id.nameText);
        EditText lastNameText = (EditText) findViewById(R.id.lastNameText);
        EditText indexNumberText = (EditText) findViewById(R.id.indexNumberText);

    }
    public void buttonClick1(View view) {

        //Your stuff
        Log.d(">>>> ", nameText.getText().toString());


    }
}

由于现在是您尝试过的普通代码,如果您想设置按钮,您必须将其声明为:

Button button1 = (Button) findViewById(R.id.button1);

然后你可以做到:

public void buttonClick1(View v) {
    // Your stuff
}

修改

请确保您的所有EditText以及所有Button上都包含XML:或者,还要确保所有内容中都包含android:id="@+id/yourID ......顺便说一下,onClick代替XML使用Button方法,您可以使用OnClickListeneronCreate 第1点到第3点应该在onCreate内,第4点应该超出View.OnClickListener

1.-在您的Activity1中实现public class Activity1 extends ActionBarActivity implements View.OnClickListener {

Button button1 = (Button) findViewById(R.id.button1);

2.-宣布

setOnClickListener

3.- button1.setOnClickListener(this); 这样做:

OnClick

4.-创建 @Override public void onClick(View view) { if (View.equals(button1)) //Your stuff } 方法:

{{1}}

答案 2 :(得分:0)

多个问题,除非您没有发布所有代码。

1)在您的XML中,您关闭了TableRow代码,但我没有看到您打开它。可能只是懒惰的复制粘贴。

2)在你的onCreate中,你似乎错过了按钮的监听器。没有任何迹象表明你在任何地方都有一个按钮。您需要按如下方式找到按钮的视图:

Button button = (Button) findViewById(R.id.nameOfButton);

然后你需要为它设置一个监听器:

        button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Here goes whatever should happen when you click the button.
        }
    });

3)至于您的ButtonClick1方法,请将其删除。看起来你正在尝试创建一个监听器,但它与它的外观相差甚远。