0

私はAndroidアプリケーションに取り組んでいます。私のアプリで奇妙な問題に直面しています。画面を見てください。ここに画像の説明を入力してください

選択ボックスから何かを選択すると、編集テキストに2回追加されます。

以下はedittextの私のコードです

snd_txt.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            System.out.println("onTextChanged"+start+"b4"+before+"count"+count);
            if (start>0) {

                    int m=snd_txt.getText().toString().lastIndexOf(".");
                    makeColorText(m,snd_txt.getText().toString().length());

            }
        }

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

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });




public void makeColorText(int num,int last) {

    int start=last-44;
    if (start<1){
        start=0;
    }
     SpannableString ss = new SpannableString(snd_txt.getText());

     ss.setSpan(new ForegroundColorSpan(R.color.Gray_Light), 0, start,0);
     ss.setSpan(new ForegroundColorSpan(Color.BLACK), start, last, 0); 
    // customize ss here
    // ...



    snd_txt.setText(ss);
    snd_txt.setSelection(last);
}

ステートメントにコメントするsnd_txt.setText(ss);と、edittextは完全に機能します。しかし、それはできません。そのメソッドを使用して、実行時に編集テキストの色を変更しました。常に正常に機能しています。ただし、予測を選択するときに、単語が2回追加されます。

誰でも解決するアイデアがあります、助けてください。

編集:マルチカラーテキストを使用してカスタム編集テキストを作成するにはどうすればよいですか。たとえば、現在の行は青で、前の行は黒です。そのようなもの

4

2 に答える 2

0

あなたはできる考えをしていますcauses a Exception due to recycling。edittextのテキスト変更イベントを監視しており、テキスト変更がある場合は、EditTextにテキストを再度設定しているため、テキスト変更イベントが再度発生し、テキストを再度設定して続行します。スタックオーバーフロー例外を与えるか、UIをハングさせます。

beforeTextChangedイベントを使用CharSequenceして、引数で取得しているものを変更する必要があります。おそらくこれはあなたのために働くでしょう。

于 2012-09-20T05:44:33.643 に答える
0

コードを変更して問題を解決しました。

snd_txt.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            if (start>0) {
                 int m=snd_txt.getText().toString().lastIndexOf(".");
         makeColorText(snd_txt.getText().toString().length(),count);    
            }
        }

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

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
        }
    });

public void makeColorText(int last,int count) {

    int start=last-44;
    if (start<1){
        start=0;
    }

    String s=snd_txt.getText().toString();

    if (count==before_val&count!=1) {

        s=s.substring(0, last-before_val);
        last=last-before_val;
    }

     SpannableString ss = new SpannableString(s);

     ss.setSpan(new ForegroundColorSpan(R.color.Gray_Light), 0, start,0);
     ss.setSpan(new ForegroundColorSpan(Color.BLACK), start, last, 0); 
    // customize ss here
    // ...



         snd_txt.setText(ss);


     before_val=count;


    snd_txt.setSelection(last);
}
于 2012-09-21T05:17:51.853 に答える