#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).