Как сделать setOnClickListener способным обновлять значение

#android #textview #onclicklistener

#Android #textview #onclicklistener

Вопрос:

Я новичок в Android, и мне нужна помощь.

У меня есть четыре textviews, и один из них доступен для просмотра:

 clickableTextView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
 

clickableTextView имеет значение textview1 , но внутри setOnClickListener clickableTextView принимает значение textview2 после первого щелчка, после второго щелчка принимает значение textview3 и так далее..

Означает, что: в первый раз можно щелкнуть textview1 , во второй раз можно щелкнуть textview2 , в третий раз textview3 и так далее..

но даже почему clickableTextView принимает точные значения, кликабельно каждый раз при первом просмотре текста, setOnClickListener не обновляет новое значение clickableTextView . Может кто-нибудь помочь мне, как я могу это сделать?

ВОТ КОД:

 correctAnswerHolder.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Log.e("correctAnswerHolder", correctAnswerHolder.getText().toString());

                if ( i < list.size() )
                {
                    i  ;
                    Log.e("i  ", Integer.toString(i));

                    String question = list.get(i).getQuestion();
                    TextView questionText = (TextView) findViewById(R.id.questionText);
                    questionText.setText(question);

                    String correctAnswer = list.get(i).getCorrectAnswer();
                    TextView correctAnswerText = (TextView) findViewById(R.id.correctAnswerText);
                    Log.e("The Correct Answer", correctAnswer);
                    String wrongAnswer_1 = list.get(i).getWrongAnswer1();
                    TextView wrongAnswerText_1 = (TextView) findViewById(R.id.wrongAnswerText_1);
                    String wrongAnswer_2 = list.get(i).getWrongAnswer2();
                    TextView wrongAnswerText_2 = (TextView) findViewById(R.id.wrongAnswerText_2);
                    String wrongAnswer_3 = list.get(i).getWrongAnswer3();
                    TextView wrongAnswerText_3 = (TextView) findViewById(R.id.wrongAnswerText_3);

                    Uri imgUri = list.get(i).getImageURI();
                    ImageView imageView = (ImageView)findViewById(R.id.imageView);
                    imageView.setImageURI(imgUri);

                    final String [] answers = {correctAnswer, wrongAnswer_1, wrongAnswer_2, wrongAnswer_3};

                    ArrayList<String> answersList = new ArrayList<String>(Arrays.asList(answers));
                    long seed = System.nanoTime();
                    Collections.shuffle(answersList, new Random(seed));

                    Log.e("AnswersListSort ", answersList.toString());

                    correctAnswerText.setText(answersList.get(0));
                    wrongAnswerText_1.setText(answersList.get(1));
                    wrongAnswerText_2.setText(answersList.get(2));
                    wrongAnswerText_3.setText(answersList.get(3));

                    if (correctAnswerText.getText().toString().equals(correctAnswer)) correctAnswerHolder = correctAnswerText;
                    else if (wrongAnswerText_1.getText().toString().equals(correctAnswer)) correctAnswerHolder = wrongAnswerText_1;
                    else if (wrongAnswerText_2.getText().toString().equals(correctAnswer)) correctAnswerHolder = wrongAnswerText_2;
                    else if (wrongAnswerText_3.getText().toString().equals(correctAnswer)) correctAnswerHolder = wrongAnswerText_3;

                    Log.e("New correctAnswerHolder", correctAnswerHolder.getText().toString());
                }
            }
        });
    }
 

Комментарии:

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

2. Спасибо за воспроизведение @MABVT. Код слишком большой и сложный для простого понимания, я не хочу путать все :/

3. Добавьте все, что находится внутри прослушивателя кликов, чтобы мы могли видеть, как вы обновляете текстовые представления.

4. @ShivamVerma я редактирую свой пост.

5. В Log.e(«New correctAnswerHolder», correctAnswerHolder.getText().toString()); Я получаю точный вывод, который должен быть, но не обновляется до setOnClickListener..

Ответ №1:

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

Редактировать:

Прежде чем опубликовать пример. Что такое correctAnswerHolder? Попробуйте изменить код следующим образом:

 if (correctAnswerText.getText().toString().equals(correctAnswer)) correctAnswerHolder.setText(correctAnswerText);
                    else if (wrongAnswerText_1.getText().toString().equals(correctAnswer)) correctAnswerHolder.setText(wrongAnswerText_1);
                    else if (wrongAnswerText_2.getText().toString().equals(correctAnswer)) correctAnswerHolder.setText(wrongAnswerText_2);
                    else if (wrongAnswerText_3.getText().toString().equals(correctAnswer)) correctAnswerHolder.setText(wrongAnswerText_3);
 

Комментарии:

1. это не работает, correctAnswerHolder — это текстовое представление с правильным ответом, при нажатии на correctAnswerHolder текстовые представления обновляются. Все в порядке, я тестировал с помощью журнала. но даже когда correctAnswerHolder обновляется, OnClickListener удерживает первый correctAnswerHolder.

Ответ №2:

Весь этот код:

                 TextView questionText = (TextView) findViewById(R.id.questionText);
                TextView correctAnswerText = (TextView) findViewById(R.id.correctAnswerText);
                TextView wrongAnswerText_1 = (TextView) findViewById(R.id.wrongAnswerText_1);
                TextView wrongAnswerText_2 = (TextView) findViewById(R.id.wrongAnswerText_2);
                TextView wrongAnswerText_3 = (TextView) findViewById(R.id.wrongAnswerText_3);
 

Должно быть в функции onCreate() действия:

 public class MyActivity extends Activity
{
    private TextView questionText;
    ...

    @Override
    public void onCreate(Bundle bundle)
    {
        super.onCreate(bundle);
        questionText = (TextView)findViewById(R.id.myactivity_questiontext);
        ...
 

Или в функции onCreateView() фрагмента, если вы их используете:

 public class MyFragment extends Fragment
{
    private TextView questionText;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, something)
    {
        View view = inflater.inflate(R.layout.myfragment, container, false);
        questionText = (TextView) view.findViewById(R.id.myfragment_questiontext);
        ...
        return view;
    ...
 

После этого, вероятно, это должно сработать, если вы уже все делаете правильно.

Комментарии:

1. С текстовыми представлениями все в порядке, все так, как должно быть. correctAnswerHolder.setOnClickListener(новый вид. OnClickListener() { @Переопределить общедоступную пустоту onClick(Просмотр v) { Log.e(«correctAnswerHolder», correctAnswerHolder.getText().toString()); —> Я протестировал correctAnswerHolder, чтобы убедиться, что получено правильное значение и все в порядке, но setOnClickListener запоминает первый щелчок (TextView).