1

私は Android 開発の初心者です (クラスを受講しています)。

EditText ウィジェットの編集済みテキストを TextView ウィジェットに表示するには、TextWatcher を使用する必要があります。

たとえば、最初に入力されたものが編集された場合 (ユーザーが「Hoozledoofer」と入力してから「zledoof」を強調表示し、最後に「v」と入力した場合など)、最初に次の形式で変更を出力する必要があります。

'zledoof' => 'v'

これは、TextView の最初の行に表示されます。次に、2 行目には、EditText ウィジェットに現在存在する全文が表示されます。

Hoover

これを行う方法がわかりません。afterTextChanged メソッドで結果を出力する必要があることはわかっています。行ったことを保存し、入力した内容を出力し続けるにはどうすればよいですか? 何かアドバイス?

以下は、クラスで指定された TextWatcher の例です。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    txtEdit = (EditText) findViewById(R.id.editText1);
    viewText = (TextView) findViewById(R.id.text);

     txtEdit.addTextChangedListener (new TextWatcher() {

          public void beforeTextChanged(CharSequence s, int start, int count, int after) {
              Log.i("TC", "beforeTC " + s.toString() + " "
                      + s.subSequence(start, start + count).toString());
          }

          public void onTextChanged(CharSequence s, int start, int before, int count) {
              Log.i("TC", "onTC " + s.toString() + " "
                      + s.subSequence(start, start + count).toString());
          }

          public void afterTextChanged(Editable s) {
              Log.i("TC", "afterTC " + s.toString());
          }
     });
}

これは、意図した最終結果を提供するために私が試したものですが、行われたすべての小さな編集を表示し続けます. これは問題にならない可能性があり、教授にとってはうまくいく可能性があります。

     txtEdit.addTextChangedListener (new TextWatcher() {

         String changed, newStr, edit;

          public void beforeTextChanged(CharSequence s, int start, int count, int after) {
              changed = s.subSequence(start, start + count).toString();

              //Log.i("TC", "beforeTC " + s.toString() + " "
                      //+ s.subSequence(start, start + count).toString());
          }

          public void onTextChanged(CharSequence s, int start, int before, int count) {
              newStr = s.toString();
              edit = s.subSequence(start, start + count).toString();

              //Log.i("TC", "onTC " + s.toString() + " "
                      //+ s.subSequence(start, start + count).toString());
          }

          public void afterTextChanged(Editable s) {
              viewText.setText(changed + " => " + edit + "\n" + newStr);

              //Log.i("TC", "afterTC " + s.toString());

          }
     });
4

2 に答える 2

2

これは宿題なので、答えは差し控えます。(あなたの先生は、手始めに良い例を示して、忙しい仕事の多くをこなしてくれました。) しかし、私はあなたにヒントを与えます:

たとえば、最初に入力されたものが編集された場合 (ユーザーが「Hoozledoofer」と入力してから「zledoof」を強調表示し、最後に「v」と入力した場合など)、変更を最初に次の形式で出力する必要があります'zledoof' => 'v'。 TextView の最初の行に表示されます。

に注意しbeforeafterくださいcount。これは、ユーザーがいつテキストを追加または削除しているかを知るのに役立ちます。

2番目の部分は簡単で、あなたはすでに答えを持っているようです:

次に、2 行目には、現在 EditText ウィジェットに表示されている全文が表示Hoover
されます。afterTextChanged メソッドで結果を出力する必要があることはわかっています。

于 2013-02-19T16:32:46.693 に答える
0

非常に注意すべきもう 1 つのことは、beforeTextChanged または onTextChanged コールバックで CharSequence を変更しないことです。また、afterTextChanged コールバックで CharSequence が変更された場合、一連のコールバックへの別の呼び出しが発生することに注意してください (無限再帰は注意しないと可能)。

TextWatcher ドキュメント: http://developer.android.com/reference/android/text/TextWatcher.html

編集:最初はEditTextに書き込んでいたと思っていたので、これについて心配する必要はないと思いますが、変更をTextViewに書き込んでいることがわかりました。でもあなたの心。

于 2013-02-19T17:27:21.977 に答える