我遇到了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 。请解释原因?
答案 0 :(得分:0)
从setContentView(view);
方法
buttonClick1
并通过删除view.
EditText nameText = (EditText) findViewById(R.id.nameText);
EditText lastNameText = (EditText) findViewById(R.id.lastNameText);
EditText indexNumberText = (EditText) findViewById(R.id.indexNumberText);
通过向控件提供height
和width
来正确初始化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
方法,您可以使用OnClickListener
来onCreate
第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
方法,请将其删除。看起来你正在尝试创建一个监听器,但它与它的外观相差甚远。