我正在编写一个测试应用程序,其中包括: 2个按钮 1 Edittext 1 Textview
第一个按钮“Random”在EditText框和TextView中都写入一个随机名称 (我有一个名为RandomName的类,它返回一个随机名称的字符串)
第二个按钮“print”将EditText中的内容写入TextView
程序在我运行时崩溃,我无法弄清楚原因。任何帮助将不胜感激
此处布局图片:http://img824.imageshack.us/img824/3046/rndname.jpg
public class RandomNameTesteActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public EditText nomeEdt = (EditText)findViewById(R.id.editText1);
public String nomeStr = nomeEdt.toString();
public TextView nomeTest = (TextView) findViewById(R.id.textView1);
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.button1:
//Put random name in EditText box and in TextView
RandomName RndName = new RandomName();
String rndNameStr = RndName.getName();
nomeTest.setText(rndNameStr);
break;
case R.id.button2:
//Print whatever is in EditText box to TextView
nomeTest.setText(nomeStr);
break;
}
}
}
编辑:更改了以下代码:(它不再崩溃,但它不起作用,因为按钮什么都不做) public class RandomNameTesteActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
EditText nomeEdt;
TextView nomeTest;
String nomeStr;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
nomeEdt = (EditText)findViewById(R.id.editText1);
nomeStr = nomeEdt.toString();
nomeTest = (TextView) findViewById(R.id.textView1);
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.button1:
//Put random name in EditText box and in TextView
RandomName RndName = new RandomName();
String rndNameStr = RndName.getName();
nomeTest.setText(rndNameStr);
break;
case R.id.button2:
//Print whatever is in EditText box to TextView
nomeTest.setText(nomeStr);
break;
}
}
}
答案 0 :(得分:1)
我认为问题在于以下几行:
public EditText nomeEdt = (EditText)findViewById(R.id.editText1);
public String nomeStr = nomeEdt.toString();
public TextView nomeTest = (TextView) findViewById(R.id.textView1);
将此更改为
public EditText nomeEdt;
public TextView nomeTest;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
nomeEdt = (EditText)findViewById(R.id.editText1);
nomeStr = nomeEdt.toString();
nomeTest = (TextView) findViewById(R.id.textView1);
}
试一试,看看它是否解决了您的问题。在设置内容视图之前,您无法查找其他视图。
如果您在提问时发布堆栈跟踪,也会有帮助
答案 1 :(得分:1)
您必须在EditText
方法中声明TextView
和onCreate()
,而不是在班级正文中。这是因为如果您的setContentView()
方法中没有调用onCreate()
,则无法调用findViewById()。
答案 2 :(得分:1)
你可以将你的ui元素声明为成员,但你不能在声明时使用“find view by id”-method给它们赋值。这是因为在您调用“设置内容视图”之后它们才会存在。所以在声明时,请执行:
public EditText nomeEdt;
依此类推,在onCreate中,在调用setContentView之后,执行:
nomeEdt = (EditText)findViewById(R.id.editText1);
依此类推:))
答案 3 :(得分:1)
您需要为按钮设置onClickListeners。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
nomeEdt = (EditText)findViewById(R.id.editText1);
nomeStr = nomeEdt.toString();
nomeTest = (TextView) findViewById(R.id.textView1);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
}