2012-09-20 178 views
0

我正在開發Android應用程序。在我的應用程序中,我面臨着一個奇怪的問題。請在我的屏幕上查看。 enter image description here選擇要編輯文本的文本

當我從選擇框中選擇任何東西,然後它將兩次添加到edittext。

以下是我的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);聲明.the的EditText上會很好地工作。但我不能這樣做。我使用該方法在運行時更改edittext顏色。一直工作得很好。但在選擇預測的時候會添加兩次這個詞。

任何人有任何想法解決,請幫助我。

編輯:我怎樣才能創建具有多色文字定製的EditText。對於如:藍色和以前的black.something像

+4

分享一些代碼,並用更多的細節解釋你的問題。 – mudit

+0

你的問題是什麼。我沒有得到你 –

+0

@AkashSingh ...請看看我的截圖..選擇任何單詞將在edittext中添加兩次.. – sarath

回答

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); 
} 
0

當前行是在做覺得哪個能causes a Exception due to recycling。您正在監視edittext的文本更改事件,並且如果有文本更改,那麼您將再次在EditText上設置文本,因此您的文本更改事件將再次發生,並且您將再次設置文本以使其繼續,並且可能會給你堆棧溢出異常或掛你的用戶界面。

您應該使用beforeTextChanged事件並修改您在參數中獲得的CharSequence。可能這會對你有用。

+0

@Dharmendra ....其工作正常......沒有做任何遞歸。 。唯一的問題是選擇兩次.... – sarath