2014-05-05 1 views
1

Я новичок в программировании на Android, и я пытаюсь создать простую кнопку, которая отображает уведомление о тосте при нажатии.findViewById не нашел свою кнопку

Я пытался инициализировать кнопку под названием "кнопка" в моем MainActivity так:

public class MainActivity extends Activity implements View.OnClickListener { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button button =(Button)findViewById(R.id.button1); 
    button.setOnClickListener(this); 
} 

    public void onClick(View v){ 
     Toast toast = Toast.makeText(this, "Click Me", Toast.LENGTH_LONG); 
     toast.show(); 
    } 
} 

Кроме того, здесь activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<Button 
android:id="@+id/button1" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/button1"> 

</Button> 

</RelativeLayout> 

UPDATE: findViewById теперь работает отлично после импорта android.R. Однако это вызвало новую ошибку, когда я вызываю setContentView (R.layout.activity_main);

Here is the new error

+0

Вы сначала вызвали 'setContentView', прежде чем получить эту кнопку? Отправьте свой код «MainActivity» – Geros

+0

Опубликовано. Извините за ошибку «Click Me» – user3133300

+0

Является ли 'strings.xml' единственным местом, где вы определяете свою кнопку? Можно ли увидеть «activity_main.xml»? – indivisible

ответ

2

Хорошо немного фона здесь. strings.xml предназначен для определения фрагментов текста. Например, текст, который может содержать кнопку (но это не определяет сама кнопка).

Кнопка должна быть определена в файле макета в каталоге res/layout /. Вероятно, ваше имя называется activity_main.xml.

Вам необходимо создать элемент кнопки в этом файле и присвоить идентификатору что-нибудь описательное. Этот тип идентификатора - это то, что ищет findViewById.

Пример:

<Button 
    android:id="@+id/thebuttonsid" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="96dp" 
    android:text="@string/button1" /> 

Вы можете получить ручку на эту кнопку, например, так:

Button button = (Button)findViewById(R.id.thebuttonsid); 

Обратите внимание, как я установить текст @string/button1? Это файл strings.xml. Однако файлы макета в каталоге макета - это то, где вы определяете элементы управления, такие как кнопки.

+0

Дополнительное примечание здесь - ваша строка должна иметь другой идентификатор, чем ваша кнопка.Строки не привязаны к определенной цели и, как таковые, являются их собственными сущностями. Это вообще помогает? –

+0

Спасибо! Заглядывая в это прямо сейчас – user3133300

+0

Хорошо, я разместил свой код activity_main.xml, и он выглядит хорошо для меня, но findViewById все еще не получает дескриптор кнопки. Вы можете взглянуть? Благодарю. – user3133300

0

Идентификатор кнопки совпадает с текстовым именем кнопки. Вы должны изменить любое другое имя. Это должно быть работа.

0

Я бы очистил проект и снова построил. Или переименуйте проект. Eclipse ... просто сложно использовать. Попробуйте использовать Android Studio.

0

Когда есть некоторая «несоответствие» с очисткой ресурсов, проект является хорошим советом. В прошлом это было еще более. Затем я проверил, будут ли ваши ресурсы компилироваться как таковые. У вас может быть ошибка где-то в ваших ресурсах, поэтому R-команда net компилируется и любая ссылка на R.id. * недопустима.