51

私の Android プロジェクトでは、TextChangedListener (TextWatcher) を編集テキスト ビューに追加する必要がありました。これには 3 つの部分があります。

  • onTextChanged()
  • beforeTextChanged()
  • afterTextChanged()

これら3つの違いは何ですか?キーリスナーでテーブルの検索を実装する必要がありましたが、私の場合、これら 3 つすべてが同じように見えました。また、それらは同じように機能しました。商品名の一部を入力すると、入力した文字列が含まれる商品のみ表が再描画されます。でもそのafterTextChanged()部分は使いました。私のコードは次のとおりです。

EditProduct.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub

            // System.out.println("onTextChanged"+s);
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub
            // System.out.println("beforeTextChanged"+s);
        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            // System.out.println("afterTextChanged"+s);

            String new_prx = s.toString();

            System.out.println(s);
            mini_productList = new ArrayList<Product>();

            // mini_productList
            int count = 0;
            if (new_prx.equals("")) {

                loadtableProducts(productList);

            } else {

                for (int i = 0; i < productList.size(); i++) {

                    if (productList.get(i).getDescription().toString()
                            .substring(0, (new_prx.length()))
                            .equalsIgnoreCase(new_prx)) {
                        mini_productList.add(productList.get(i));
                        count++;

                    }
                }

                loadtableProducts(mini_productList);
            }
        }
    });

では、この3つについて誰か説明してもらえますか?

4

5 に答える 5

0
  1. afterTextChanged (Editable s) - このメソッドは、テキストが変更されたときに呼び出されます。変更を加えると、このメソッドが再帰的に再度呼び出されるため、ここでの操作の実行には注意する必要があります。そうしないと、無限ループが発生する可能性があります。

  2. beforeTextChanged (CharSequence s, int start, int count, int after) - このメソッドは、s 内で start から始まる count 文字が after の長さの新しいテキストに置き換えられようとしていることを通知するために呼び出されます。このコールバックから s を変更しようとするとエラーになります。

  3. onTextChanged (CharSequence s, int start, int before, int count) - このメソッドは、s 内で start から始まる count 文字が以前の長さの古いテキストを置き換えたことを通知するために呼び出されます。このコールバックから s を変更しようとするとエラーになります。

于 2015-11-16T10:00:39.853 に答える