使用单个TextView

时间:2016-02-02 21:58:51

标签: android

我正在使用addTextChangedListener,它等待来自textView的用户输入,作为简单测验应用程序的一部分。

我对所有问题使用单个活动 - 每当用户进入下一个问题时更新UI。我遇到的问题是,由于使用了相同的textView,侦听器正在从所有问题中获取事件。有没有人知道任何让听众只从当前问题的文本视图中侦听事件的方法?

//Listener added in onCreate()
textViewLetter = (TextView) findViewById(R.id.textView6);
textViewLetter.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

            Toast t = Toast.makeText(Introduction.this, "Changed" Toast.LENGTH_SHORT);
            t.show();
        }
    });

//更新UI的方法 - lessonNo是用户所在的当前问题。

public void questionOne(int lessonNo)
  {
    resetText();
    objective.setText(questions.get(lessonNo).getObjective());
}

public void questionTwo(int lessonNo)
{
    resetText();
    objective.setText(questions.get(lessonNo).getObjective());
}

2 个答案:

答案 0 :(得分:1)

请注意,您添加一个监听器TextView,而不是设置它。 如果您多次调用addTextChangeListener,您将拥有多个将在事件发生后被触发的侦听器。

当您需要加载新问题时,请更新视图而不是重新创建它。确保所有初始化都在onCreate完成,包括为您的观点设置监听器。

当用户必须收到下一个问题时,请仅使用TextView(以及其余视图)更新setText

答案 1 :(得分:0)

首先不要使用监听器,如果不直接捕捉事件。 在你的情况下,你可以纯粹这样做:

textViewLetter.setText("some data");
  Toast.makeText(this, "Changed" Toast.LENGTH_SHORT).show();