Как я могу узнать последовательность нажатых кнопок для отображения в текстовых представлениях

#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:

  1. Поместите кнопки и текстовые представления в массивы:
 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
}
  
  1. Сохранить индекс текущего клика:
 private int mClickIndex;
  
  1. Используйте тот же `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);
  }
  ...
}