Что не так с этой программой для Android? - PullRequest
1 голос
/ 16 января 2012

Я пишу тестовое приложение, которое состоит из: 2 кнопок 1 Edittext 1 Textview

Первая кнопка «Random» записывает случайное имя как в поле EditText, так и в TextView (у меня есть класс с именем RandomNameкоторый возвращает строку со случайным именем)

Вторая кнопка «печать» записывает, что находится в EditText в TextView

Программа вылетает, когда я ее запускаю, и я не могу понять,Зачем.Любая помощь будет признательнаработать, как в кнопках ничего не делать)

 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 ]

1 голос
/ 16 января 2012

Вам нужно установить кнопки 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);
}
1 голос
/ 16 января 2012

Вы должны объявить свои EditText и TextView в методе onCreate(), а не в теле вашего класса.Это потому, что вы не можете вызвать findViewById (), если вы не вызвали setContentView(), который есть в вашем методе onCreate().

1 голос
/ 16 января 2012

вы можете объявить ваши элементы пользовательского интерфейса как члены, но вы не можете дать им значения с помощью метода "find view by id" при объявлении.это потому, что они не существуют до тех пор, пока вы не позвоните «установить представление контента».поэтому при объявлении выполните:

public EditText nomeEdt;

и т. д. и в onCreate после вызова setContentView выполните:

nomeEdt = (EditText)findViewById(R.id.editText1);

и т. д.)

1 голос
/ 16 января 2012

Мне кажется, проблема в следующих строках:

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);
}

Попробуйте и посмотрите, исправит ли это вашу проблему. Вы не можете просматривать другие виды, пока не настроите представление содержимого.

Также полезно, если вы отправляете трассировку стека при задании вопроса

...