#android #button #textview
#Android #кнопка #textview
Вопрос:
Всем привет, как дела? Я в порядке.
Я разрабатываю приложение, в котором у меня есть шесть кнопок и шесть текстовых представлений: кнопка 1, Button2, Button3, Button4, Button5, Button6. textView1, textView2, TextView3, TextView4, TextView5, TextView6.
Я должен отобразить текст кнопок в textviews (getText().toString()); Но мне нужно отобразить в textView1 первую нажатую кнопку, независимо от того, была ли это Button1, Button2, Button3, Button4, Button5 или Button6. Во втором текстовом представлении нажата вторая кнопка. В текстовом представлении жажды нажата третья кнопка.
Это мой код
пакет com.flixarts.ar.englishnow;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.w3c.dom.Text;
public class quiz extends AppCompatActivity {
private Button opcion1;
private Button opcion2;
private Button opcion3;
private Button opcion4;
private Button opcion5;
private Button opcion6;
private TextView text0;
private TextView text1;
private TextView text2;
private TextView text3;
private TextView text4;
private TextView text5;
private TextView text6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
text0 = (TextView)findViewById(R.id.text0);
text1 = (TextView)findViewById(R.id.text1);
text2 = (TextView)findViewById(R.id.text2);
text3 = (TextView)findViewById(R.id.text3);
text4 = (TextView)findViewById(R.id.text4);
text5 = (TextView)findViewById(R.id.text5);
text6 = (TextView)findViewById(R.id.text6);
opcion1 = (Button)findViewById(R.id.opcion1);
opcion2 = (Button)findViewById(R.id.opcion2);
opcion3 = (Button)findViewById(R.id.opcion3);
opcion4 = (Button)findViewById(R.id.opcion4);
opcion5 = (Button)findViewById(R.id.opcion5);
opcion6 = (Button)findViewById(R.id.opcion6);
opcion1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Button opcion1 = (Button)view;
String textButton = opcion1.getText().toString();
text0.setText(textButton);
//writeTextView();
}
});
opcion2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Button opcion2 = (Button)view;
String textButton2 = opcion2.getText().toString();
text2.setText(textButton2); }});
opcion3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Button opcion3 = (Button)view;
String textButton3 = opcion3.getText().toString();
text3.setText(textButton3); } });
opcion4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Button opcion4 = (Button)view;
String textButton4 = opcion4.getText().toString();
text4.setText(textButton4); } });
opcion5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Button opcion5 = (Button)view;
String textButton5 = opcion5.getText().toString();
text5.setText(textButton5); } });
opcion6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Button opcion6 = (Button)view;
String textButton6 = opcion6.getText().toString();
text6.setText(textButton6); } });
}
}
Проблема с этим кодом заключается в том, что отображается текст первой кнопки в первом текстовом представлении, второй кнопки во втором текстовом представлении, третьей кнопки в текстовом представлении tirhd и т. Д.
Мне нужно показать в первом текстовом представлении первую нажатую кнопку, независимо от того, была ли это butotn1, 2, 3,4, 5 или 6.
Поэтому каждый раз, когда пользователь нажимает кнопку от 1 до шести, он устанавливает текст в текстовом представлении по порядку.
Спасибо за чтение! Хорошего дня, Мауро.
Ответ №1:
Мауро: поместите все ваши TextView
ссылки в список [text0,… textn] и сохраните индекс для текущего текстового представления, начиная с 0:
List<TextView> textViews = Arrays.asList(text1, text1);
int current = 0;
Сделайте свою деятельность quiz
реализуемой View.OnClickListener
и переопределяемой onClick
. Затем назначьте заголовок кнопки текущему текстовому представлению из массива.
@Override
public void onClick(View v) {
textViews.get(current % textViews.size()).setText(((Button)v).getText());
current ;
}
Увеличение current
гарантирует, что следующая нажатая кнопка «попадет» в следующий текстовый вид.
Комментарии:
1. Спасибо, Эддиэль!
2. Привет, Эддиэль, у меня ошибка нулевого указателя с этим кодом java.lang. Исключение NullPointerException: попытка вызвать виртуальный метод ‘java.lang. CharSequence android.widget. Button.getText()’ для нулевой ссылки на объект
3. Действительно странно, что кнопка, которую вы получаете в качестве аргумента
v
,onClick
равна нулю, когда это должна быть та самая кнопка, которую вы нажимаете. Попробуйте перенести каждый шаг в отдельную строку до и используйте отладчик, пока не найдете, в чем проблема.
Ответ №2:
- Поместите кнопки и текстовые представления в массивы:
private Button[] buttons;
private TextView[] tvs;
@Override
protected void onCreate(Bundle savedInstanceState) {
buttons = new Button[6];
buttons[0] = findViewById(R.id.opcion1);
// make the same for all buttons and TVs
}
- Сохранить индекс текущего клика:
private int mClickIndex;
- Используйте тот же `OnClickListener для всех кнопок:
private View.OnClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Button opcion = (Button)view;
if (mClickListener >= 6) return;
tv[mClickIndex].setText(opcion.getText().toString());
mClickListener ;
}
};
...
onCreate() {
...
for (int i = 0; i < buttons.length; i ) {
buttons[i].setOnClickListener(mOptionsClickListener);
}
...
}