我已经用其他语言专业编码了很多年,但我对Android很陌生,我从堆栈溢出等网站上学到了很多东西。
经过数小时的搜索,我正在努力尝试在按钮单击方法中获取对 EditText 的引用。 "编辑文本"和"按钮"都是同一活动的一部分。
这是我activity_my.xml的删减部分:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:id="@+id/my_layout"
tools:context=".MyActivity" >
<EditText android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
android:singleLine="true"
android:id="@+id/name" />
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/name"
android:text="@string/save"
android:id="@+id/save" />
</RelativeLayout>
以及我的MyActivity的一部分.java:
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutInflater().inflate(R.layout.activity_my, null));
findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
saveClick(view);
}
});
}
public void saveClick(View view)
{
EditText editText = (EditText) view.findViewById(R.id.name); // this is always null
if (editText != null)
{
String name = editText.getText().toString();
}
}
}
我认为这是因为我正在尝试在视图参数上使用 findViewById 方法。 我记得在某处读到按钮单击事件的参数是按钮本身,而不是布局。 如果这是正确的,我如何获取对布局的引用以便使用 findViewById 方法? 还是有别的问题?
我见过 onClick 事件包装匿名方法的示例,您可以在其中成功使用 findViewById,因为(我认为)您基本上嵌套在 onCreate 事件中。 但是,我想将我的按钮单击事件保留为单独的(非匿名)方法。
提前感谢您的任何帮助。
更改此内容
EditText editText = (EditText) view.findViewById(R.id.name);
自
EditText editText = (EditText)findViewById(R.id.name);
您可以简单地使用
setContentView(R.layout.activity_my);
径直。
我想编辑文本属于activity_my.xml
此外,无需每次单击按钮时初始化编辑文本
EditText editText;// declare as instance variable
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
editText = (EditText) view.findViewById(R.id.name)
public void saveClick(View view)
{
EditText editText = (EditText) view.findViewById(R.id.name); // this is always null
if (editText != null)
{
String name = editText.getText().toString();
}
}
仅当EditText
位于Button
内时,才返回有效的View
(object != null
)。您应该在视图的层次结构中查找EditText
使用这个
EditText editText = (EditText) findViewById(R.id.name);
View.findViewById()
方法查找子视图。
在您的情况下,findViewById 调用位于编辑文本视图的 onClickListener 中。此视图没有子视图,它只是一个简单的编辑文本。这就是你得到空的原因。