这个Android程序有什么问题?

时间:2012-01-15 21:27:44

标签: android textview android-edittext

我正在编写一个测试应用程序,其中包括: 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;
      }
     } 

}

4 个答案:

答案 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方法中声明TextViewonCreate(),而不是在班级正文中。这是因为如果您的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);
}