スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

  • Comments (Close): -
  • TrackBack (Close): -

入力の即時反映

これまで、ボタンを押すとEditTextの入力内容がTextViewやAlertDialogに反映されるアプリケーションを作りました。

今回は、ボタンを押さずして、EditTextへの入力内容がリアルタイムでTextViewに反映されるアプリケーションを作ります。

その際必要となるのが、TextWatcherというインタフェースです。TextWatcherは、EditTextの入力を監視して入力情報を取得します。

OnClickListener の記事では、OnClickListenerインタフェースを継承してボタンをクリックするというイベントに対して処理を行いましたが、今回は、TextWatcherインタフェースを継承して入力テキストの変化というイベントに対して処理を行います。

OnClickListenerを呼び出したのはsetOnClicklistener()メソッドでしたが、TextWatcherを呼び出すのはaddTextChangedListener()メソッドになります。

TextWatcherインタフェースにおいては、beforeTextChanged()メソッド、onTextChanged()メソッド、afterTextChanged()メソッドの3つのメソッドの定義が必要になります。

この3つのメソッドの違いは、beforeTextChanged()が操作前のEditTextの状態を取得し、onTextChanged()は操作中の状態を取得し、afterTextChanged()は操作後の状態を取得します。とはいえ、違いは微妙でとりあえずいずれかのメソッドの中に処理を記述して残りは中身は空でも操作に支障はありません。

では、TextWatcherをインポート・継承してメソッドを記述し、addTextChangedListener()メソッドで呼び出すというオーソドックスな方法でプログラミングしてみましょう。

package sample.basic;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.text.Editable;
import android.widget.TextView;
import android.text.TextWatcher;

public class HelloAndroid extends Activity implements TextWatcher{

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

EditText edittext1=(EditText)findViewById(R.id.edittext1);
edittext1.addTextChangedListener(this);
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
}

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

@Override
public void afterTextChanged(Editable s) {
TextView textview1 = (TextView)findViewById(R.id.textview1);
textview1.setText(s);
}
}


実行結果 ;
20110729_1

無名クラスの活用


無名クラスを利用して、ソースの書き換えをしてみましょう。

無名クラスの利点は、ソースがすっきりすることです。たとえばインタフェースをいくつも承継すると、クラス名の後に implements X,Y,Z... と多重承継し、インタフェースX,Y,Zのメソッドをクラス内に記述しなければなりませんが、同じクラス内にいろんなインタフェースのメソッドが混在すると理解しにくいプログラムになります。

この点、無名クラスを使えばメソッドがどのインタフェースのものなのか一目瞭然です。

では、無名クラスを利用したソースです。

package sample.basic;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.text.Editable;
import android.widget.TextView;
import android.text.TextWatcher;

public class HelloAndroid extends Activity{

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

EditText edittext1=(EditText)findViewById(R.id.edittext1);
edittext1.addTextChangedListener(new TextWatcher(){
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void afterTextChanged(Editable s) {
TextView textview1 = (TextView)findViewById(R.id.textview1);
textview1.setText(s);
}
});
}
}


addTextChangedListener()メソッドでTextWatcherを設定すると同時にafterTextChanged()メソッドで処理を記述しているため、すっきりとまとまったソースになりました。

関連記事
スポンサーサイト

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

Comments:

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://androidhacker.blog94.fc2.com/tb.php/23-b65ac0bd
  • 閉じるボタン
レファレンス
月別アーカイブ
リンク
カテゴリ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。