Android 为什么要在onclick方法中找到EditText
我是一个编程新手。最近,我试图自学android和java,所以我有一些基本的疑问,请帮我澄清一下 我想在单击按钮(使用XML文件中的onClick属性)后显示在EditText中键入的文本。只有在“Press”方法中找到EditText,我的程序才能工作 但如果全局查找文本字段,则不会。有人能解释一下吗 这是我的密码Android 为什么要在onclick方法中找到EditText,android,android-edittext,Android,Android Edittext,我是一个编程新手。最近,我试图自学android和java,所以我有一些基本的疑问,请帮我澄清一下 我想在单击按钮(使用XML文件中的onClick属性)后显示在EditText中键入的文本。只有在“Press”方法中找到EditText,我的程序才能工作 但如果全局查找文本字段,则不会。有人能解释一下吗 这是我的密码 public class MainActivity extends Activity { String text; @Override
public class MainActivity extends Activity {
String text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void Press (View view) {
EditText input =(EditText) findViewById(R.id.main_input);
text= input.getText().toString();
Toast.makeText(this, text,
Toast.LENGTH_LONG).show();
}
}
XML文件
<EditText
android:id="@+id/main_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/start"
android:layout_centerHorizontal="true"
android:layout_marginBottom="86dp"
android:ems="10"
android:inputType="textPersonName" />
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/maiinput"
android:layout_alignParentTop="true"
android:layout_marginLeft="28dp"
android:layout_marginTop="178dp"
android:onClick="Press"
android:text="Start" />
试试这种方法
public class MainActivity extends Activity {
String text;
EditText input;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input =(EditText) findViewById(R.id.main_input);
}
public void clickme(View view) {
text= input.getText().toString();
Toast.makeText(MainActivity.this, text,Toast.LENGTH_LONG).show();
}
}
然后将onClick=“clickme”
更改为活动\u main.xml中的按钮
public class MainActivity extends Activity {
String text;
EditText input;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input =(EditText) findViewById(R.id.main_input);
}
public void clickme(View view) {
text= input.getText().toString();
Toast.makeText(MainActivity.this, text,Toast.LENGTH_LONG).show();
}
}
private EditText text;
private Button ok;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=(EditText)findViewById(R.id.editText1);
ok=(Button)findViewById(R.id.button1);
ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, text.getText().toString(), Toast.LENGTH_LONG).show();
}
});
}
并将onClick=“clickme”
更改为活动\u main.xml中的按钮
private EditText text;
private Button ok;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=(EditText)findViewById(R.id.editText1);
ok=(Button)findViewById(R.id.button1);
ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, text.getText().toString(), Toast.LENGTH_LONG).show();
}
});
}
你必须这样写,希望这对你有用
你必须这样写,希望这对你有用来自评论:
我试图在mainactivity本身下面找到edittext,就像这个公共类mainactivity扩展了Activity{edittext input=(edittext)findViewById(R.id.main_input);但是它当时没有显示任何错误,只是在运行之后才显示错误。你能解释发生了什么吗
初始化类成员变量时,调用findViewById()
太早。此时活动还没有窗口,它将NPE
您应该调用findViewById()
:
- 在
onCreate()
或更高版本中,当出现窗口且未发生NPE时,以及
- 在
setContentView()
之后,当有一个视图层次结构来实际查找某些内容时,可以返回非null
来自评论:
我试图在mainactivity本身下面找到edittext,就像这个公共类mainactivity扩展了Activity{edittext input=(edittext)findViewById(R.id.main_input);但是它当时没有显示任何错误,只是在运行之后才显示错误。你能解释发生了什么吗
初始化类成员变量时,调用findViewById()
太早。此时活动还没有窗口,它将NPE
您应该调用findViewById()
:
- 在
onCreate()
或更高版本中,当出现窗口且未发生NPE时,以及
- 在
setContentView()
之后,当有一个视图层次结构来实际查找某些内容时,可以返回非null
你把input=(EditText)findViewById(R.id.main_input);
放在哪里了?你把EditText input
声明在mainactivity本身下面的什么地方了。我对编程非常陌生,所以请原谅我4个错误你把input=(EditText)findViewById(R.id.main_input)放在哪里了
首先?您在mainactivity本身下面的哪里声明了EditText input
?我对编程非常陌生,所以请原谅我4错误代码工作正常…我试图在mainactivity本身下面找到EditText,就像这个公共类mainactivity扩展活动{EditText input=(EditText)findViewById一样(R.id.main_input);但它当时没有显示任何错误,但只有在运行之后才显示错误。你能解释一下发生的代码工作正常吗?我试图在mainactivity下面找到edittext,就像这个公共类mainactivity extensed Activity{edittext input=(编辑文本)findViewById(R.id.main\u输入);但它当时没有显示任何错误,但只有在运行之后才显示错误。你能解释发生的情况吗?HKS人每个人都输入了代码,但没有人解释。现在我明白是我犯了错误。希望有像你这样的人来指导我。所以只有在我输入setcontentview之后我现在有一个窗口。在onCreate
中有一个窗口,没有NPE;在setContentView()之后
能找到一些东西吗谢谢你的帮助非常感谢。你能告诉我你是从哪里学到这个概念的吗。你能提供任何网站、书籍、论坛让我更有效地学习吗。我从网上找不到这类信息。我是通过阅读和编写代码,特别是阅读平台源代码,集中精力来学习的由于手头的一些问题,例如我正在处理的项目中的一个bug或某个问题。thks man每个人都输入了代码,但没有人解释它。现在我明白是我犯了错误。希望有像你这样的人来指导我。因此,只有在我输入setcontentview方法后,我才有一个正确的窗口。在onCreate
中有一个窗口,没有NPE;在setContentView()之后
能找到一些东西吗谢谢你的帮助非常感谢。你能告诉我你是从哪里学到这个概念的吗。你能提供任何网站、书籍、论坛让我更有效地学习吗。我从网上找不到这类信息。我是通过阅读和编写代码,特别是阅读平台源代码,集中精力来学习的由手头的某个问题给出,例如我正在处理的项目中的一个bug或某个问题。