ここでやろうとしているのは、ソフトキーの「Enter/Done」を押して、現在 EditText にある単語を追加することです。ただし、ソフトキーの「Enter/Done」を押すたびに、アプリがクラッシュします。
デバッグを試みましたが、問題はadapter.add(v.getText().toString());のようです。ライン。理由/方法がわかりません!!
public boolean onEditorAction(TextView v,int actionId, KeyEvent event) {
Log.d("InThere","in onEditorAction1");
if((event==NULL) || (event.getAction()==KeyEvent.ACTION_UP))
{
if(event==NULL)
Log.d("InThere","inside if+EVENT");
if(event.getAction()==KeyEvent.ACTION_UP)
Log.d("InThere","inside if+ACTION_UP");
Log.d("InThere","before adapter ");
adapter.add(v.getText().toString()); <<<cause of error ?
Log.d("InThere","after adapter ");
v.setText("");
InputMethodManager imm=(InputMethodManager)
getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
Log.d("InThere","in onEditorAction2");
return true;
}
「InThere」タグを使用してフィルターを作成しました。LogCat では次のようになります。
InThere in onEditorAction1
InThere in onEditorAction2
InThere in onEditorAction1
InThere inside if+ACTION_UP
InThere before adapter
また、実際には EditText から文字列が取得されているのに、 onEditorAction 関数の TextView のインスタンスを介して文字列が取得されている理由を理解していただけますか?
[アップデート]
これがコードの宣言部分です....
private final static String[] items={"this","is","a","really","silly","list"};
private static final KeyEvent NULL = null;
private ArrayList<String> words=null;
private ArrayAdapter<String> adapter;
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
words = new ArrayList<String>();
for(String s: items)
{
words.add(s);
}
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items);
setListAdapter(adapter);
}