2016-06-10 3 views
1

나는이 문자열을 가지고있다.텍스트 관찰자를 구현 한 후 텍스트 뷰에서 문자열의 첫 번째 문자 만 가져 오는 중입니까?</p>이 <pre><code>String sentence = sometext __ sometext __ sometext __ sometext.("__" = underscore) </code></pre> <p>그래서 밑줄 대신에, 나는의의 EditText 값을 넣어 원하는 것을 실시간으로 사용자 입력 :

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

    ed1 = (EditText) findViewById(R.id.editText); 
    ed2 = (EditText) findViewById(R.id.editText2); 
    ed3 = (EditText) findViewById(R.id.editText3); 
    tv = (TextView) findViewById(R.id.textView); 


    sentence = tv.getText().toString(); //gettingthestring. 

    edtv1 = ed1.getText().toString(); 
    edtv2 = ed2.getText().toString(); 
    edtv3 = ed3.getText().toString(); 

    callMethod(); 


} 


private void callMethod() { 


    if (ed1 != null) { 
     ed1.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
       sen1 =(sentence.replaceFirst("__", "___")); 

      } 

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

      } 

      @Override 
      public void afterTextChanged(Editable s) { 

       tv.setText(sen1.replace("___" ,"_"+s.toString()+"_")); 

      } 
     }); 
     edtv1 = ed1.getText().toString(); 

    } 
    callMethod2(); 
} 

private void callMethod2() { 


    if (ed2 != null) { 


     ed2.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 


       sen2 = tv.getText().toString(); //got the new string 
     //sen = sometext _ed1 value_ sometext __ sometext __ sometext.("__" = underscore) 

       sen2 =(sen2.replaceFirst("__","___")); 

      } 

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

      } 

      @Override 
      public void afterTextChanged(Editable s) { 

       tv.setText(sen2.replace("___","_"+s.toString()+"_")); 

      } 
     }); 
     edtv2 = ed2.getText().toString(); 

     sen2 = sentence; 



    } 
    callMethod3(); 

//some code 

    } 

문제점 : 두 번째와 세 번째의 경우

"__"(밑줄) 내가 얼마나 많은 문자가 사용자의 입력에 관계없이 문자열의 첫 번째 문자를보고하고 여기에 내 코드입니다 .

+0

문서 읽기 : https://developer.android.com/reference/android/text/TextWatcher.html TextWatcher는'EditText'에서 각 문자가 변경된 후에 호출 될 것이므로 기본 동작입니다 .. !! –

답변

0

afterTextChanged()에서 업데이트 된 문장을 문자열에 저장하고 그 문자열을 다음 afterTextChanged()에 사용하십시오.

String update1 = txtview.getText().toString(); 
+0

"한 줄"이 아닙니다. 그들은 꽤 많이 있습니다. : | – Sufian

+0

String update1 = (String) txtview.getText(); // update1에 업데이트 된 문자열을 저장하고 두 번째 방법에이 코드를 사용했습니다. –

+0

관련 코드 및 주석으로 응답을 업데이트하고 중요하지 않거나 필요한 것을 제거하면 좋을 것입니다. :) – Sufian