2012-03-27 13 views
3

私は入力時に応答するためのSLOWのEditTextを持っています。遅れは私に解決策を見いださせるのに十分厄介です。私はいくつかの調査を行い、SOスレッドEditText lagging when typing textを見つけました。そして、それは自分のスレッドにコードを移動することを提案します。私はそれをしましたが、私はまだラグを経験しています。android - EditTextタイピングが遅いです。

EDIT

(感謝dreamtale)以下のコメントを見た後、私は新しいスレッドは必要ありません知っています。しかし、コードをonTextChangedまたはafterTextChangedイベントに戻すと、応答が遅くなります。私は、最新の変更を反映するようにコードを修正しました:

のxml:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    try 
    { 
     vView = inflater.inflate(R.layout.submit_issue, container, false); 

     //Setup initial "characters remaining" text. 
     mCharsRemaining = (TextView)vView.findViewById(R.id.tvCharactersRemaining); 
     mCharsRemaining.setText(String.valueOf(iMaxChars) + ' ' + getString(R.string.CharsRemaining)); 

     //Event for counting the characters remaining. 
     mSummaryEditText.addTextChangedListener(TextEditorWatcher); 

     new LoadPOCsTask().execute(); 
    } 
    catch (Exception e) 
    { 
     Errors.LogError(e); 
    } 
    return vView;   
} 

TextEditorWatcherイベント:

private final TextWatcher TextEditorWatcher = new TextWatcher() { 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

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

     int iMaxCharsRemaining = (iMaxChars - s.length()); 
     mCharsRemaining.setText("Static Text "); //Intentionally put static text to see if problem still occurs, and yes it does. 
    } 

    public void afterTextChanged(Editable s) { 
    } 
}; 

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:layout_weight="1" > 

    <LinearLayout android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dp" 
     android:layout_marginLeft="2dp" 
     android:layout_marginRight="2dp" > 
     <include 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      layout="@layout/right_layout_header" />    
    </LinearLayout> 

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:layout_marginRight="5dp" 
    android:layout_marginBottom="5dp"> 

    <TableLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:shrinkColumns="1" 
     android:drawable="@drawable/light_bg" > 

     <TableRow 
      android:layout_width="200dp" 
      android:layout_height="wrap_content" 
      android:shrinkColumns="1"> 
       <TextView 
        android:id="@+id/tvSummaryBold" 
        android:layout_width="wrap_content" 
        android:textStyle="bold" 
        android:gravity="left" 
        android:text="@string/Summary" 
        style="@style/IssueDetailsLabelTextView" /> 
     </TableRow> 
     <TableRow 
      android:layout_width="200dp" 
      android:layout_height="wrap_content" 
      android:shrinkColumns="1"> 

      <EditText 
        android:id="@+id/txtSummary" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:hint="@string/SummaryDefaultText" 
        android:maxLength="255" 
        android:singleLine="true" 
        android:layout_weight="1" 

       /> 
     </TableRow> 
     <TableRow> 
       <TextView 
        android:id="@+id/tvCharactersRemaining" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textColor="@color/Gray" 
        android:paddingLeft="5dp" 
        /> 
     </TableRow> 
    </TableLayout> 
    </ScrollView> 
</LinearLayout> 

ここでフラグメントのためのコードです。私は入力時にまだ遅れている理由を理解できません。 addTextChangeListenerイベントを削除すると正常に動作します。アイデア?

+0

EditTextWatcherTaskタスク= new EditTextWatcherTask(s); task.execute(); 'call in afterTextChanged ... ' –

+0

まだ同じラグを取得しています... – Robert

+0

私はあなたの仕事が多くを助けているとは思わない、あなたがバックグラウンドに移動している唯一のものは減算です。実際のラグについては、遅れている正確なものを特定しようとしましたか?同様に、 'mCharsRemaining.setText(" static text "+ mMaxCharsRemaining)'を実行して、リソースの取得がパフォーマンスを傷つけるかどうかを調べてみてください。 – dmon

答えて

9

私は親を埋める/一致させるために、加重幅を使用して0dpEditText widthを変更することで修正されましたListView内部EditTextを使用して、同様の問題を、持っていました。

EditTextの幅がコンテンツをラップするように設定されていると、すべてが収まるように調整/再描画され、ListViewも試行されるため、これがなぜ発生したのかわかりませんすべてが収まるようにそれ自身を再描画する。したがって、EditTextを固定幅にすることで、この再描画は不要になります。

+0

これが私のために動作しませんでしたedittextが遅れる理由を知っていますか? –

0

テキストを入力すると、onTextChangedが何度も呼び出されますので、新しいスレッド(EditTextWatcherTask)を何度も何度もやり直しています。それはシステムの多くのリソースを消費します。

スレッドはそれを完了するために多くの時間を必要とするタスクのため、スレッドを必要とせず、タスクを削除するだけで、計算コードをonTextChangedに入れるだけです。

+0

レスポンスありがとうございました...元々コードがありましたが、応答が非常に遅かったです。 – Robert

+0

元の意味は?とにかく 'AsyncTask'をそこで使うべきではありません。タスクを削除すると、応答は通常のようになります。私は最初のコードを作成したとき – dreamtale

+0

、それはonTextChangedイベントであった(さえafterTextChangedイベントを試み)、応答がまだ遅かったです。私はあなたが言ったことのために非同期タスクを削除しましたが、これは意味があります。私は他のポスト(スレッド内のリンクを参照)のためにそのアイディアを消してしまっただけで、遅れたテキストで問題を解決するように見えました。 – Robert

1

編集AndroidManifest

私の古いコード

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> 

私の新しいコード

<uses-sdk android:minSdkVersion="8" /> 

私はちょうどtargetSdkVersionを削除し、遅れがなくなっ...

0

私が見つかりました。予測テキストをオフにすることが助けになりました。

android:inputType="text|textNoSuggestions"