2015-07-03 2 views
0

Прежде всего позвольте мне предисловие к этому, будучи совершенно новым для разработки Android. Я пытаюсь просто изменить текст на разных кнопках, когда я нажимаю кнопку «Это». Я могу изменить видимость с помощью setVisibility(), поэтому я думаю, что правильно ссылаюсь на кнопки, но когда я пытаюсь setText(), я получаю ошибку: «Не удается разрешить метод setText (Java.Lang.String)» «Android/Java - setText для кнопки в onbuttonclick не может решить метод

Почему это позволяет мне изменять видимость, но не текст? Что мне нужно сделать, чтобы исправить проблему?

Вот часть XML для одной из кнопок я пытающиеся изменить текст на:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Button" 
    android:id="@+id/songbutton4" 
    android:layout_below="@+id/button4" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignRight="@+id/button4" 
    android:layout_alignEnd="@+id/button4" 
    android:visibility="invisible" /> 

Вот код для события OnClick:

public void onbutton1click(View v){ 
//on click turn the 4 buttons invisible, and show the other 5 
    View b1 = findViewById(R.id.button1); 
    b1.setVisibility(View.INVISIBLE); 
    View b2 = findViewById(R.id.button2); 
    b2.setVisibility(View.INVISIBLE); 
    View b3 = findViewById(R.id.button3); 
    b3.setVisibility(View.INVISIBLE); 
    View b4 = findViewById(R.id.button4); 
    b4.setVisibility(View.INVISIBLE); 
    View b5 = findViewById(R.id.button5); 
    b5.setVisibility(View.INVISIBLE); 

    View sb1 = findViewById(R.id.songbutton1); 
    sb1.setVisibility(View.VISIBLE); 
    sb1.setText("hello"); // THIS IS WHERE THE ERROR OCCURS 
    View sb2 = findViewById(R.id.songbutton2); 
    sb2.setVisibility(View.VISIBLE); 
    View sb3 = findViewById(R.id.songbutton3); 
    sb3.setVisibility(View.VISIBLE); 
    View sb4 = findViewById(R.id.songbutton4); 
    sb4.setVisibility(View.VISIBLE); 
} 

ответ

0

Вы это делаете в фрагменте или в действии?

Во всяком случае, вы должны сделать:

Button sb1 = (Button) findViewById(R.id.songbutton1); 

Это, как мы добавляем элементы. Если вы устанавливаете виджет Button в своем макете, таким образом вам нужно иметь ссылку на этот виджет. Объявление правильного типа и литья с использованием().

Если вы делаете это во Фрагменте, а не в действии, вам также необходимо привязать его к соответствующему виду.

Button sb1 = (Button) v.findViewById(R.id.songbutton1); 

И совет - не получайте ссылку на представления (виджеты) в слушателе. Сделайте это перед слушателем.

+0

Идеальное решение. Я попытался изменить код плохого «просмотра», который использовал с правильным кодом, который вы опубликовали, и, очевидно, он работал нормально. Благодарим вас за ответ и совет относительно ссылки на виджеты перед слушателем. Я запомню это. [И да, это было в Деятельности] – David

0

Сначала назначить кнопку для переменной, т.е.: Button btnSong = (Button) findViewById(R.id.songbutton4);
затем установить OnClick слушателя к кнопке с помощью метода btSong.setOnClickListener();, который потребует от вас объявить новый onClickListener внутри кнопки и метод будет создан в рамках которой и может разместить приведенный выше код под методом. В качестве альтернативы добавьте атрибут XML, который указывает кнопку прямо на метод.

 Смежные вопросы

  • Нет связанных вопросов^_^