Android ListViewでEditViewの再フォーカス取得
2046 ワード
質問:ListViewでEditViewを使用し、初めてEditViewにフォーカスしたときにキーボードをポップアップします.EditViewに焦点を失わせた.
解析:初めてEditViewを使用してキーボードをイジェクトした後、getViewメソッドが再呼び出されるためです.EditViewに焦点を失わせた.EditViewを2回目にクリックすると、すでにキーボードが存在するためgetViewメソッドは呼び出されず、フォーカスも失われません.
アイデア:EditViewをクリックするたびに、現在クリックしているViewのpositionを記録し、EditViewのカーソルオフセット位置を記録します.次回getViewを呼び出すときにこのレコードを同時に処理します.
2つのタグビットの定義
次にgetViewにEditViewフォーカスの変化イベントを追加し、タグビットを記録します.
ビューを再描画するときに使用するタグビット
解析:初めてEditViewを使用してキーボードをイジェクトした後、getViewメソッドが再呼び出されるためです.EditViewに焦点を失わせた.EditViewを2回目にクリックすると、すでにキーボードが存在するためgetViewメソッドは呼び出されず、フォーカスも失われません.
アイデア:EditViewをクリックするたびに、現在クリックしているViewのpositionを記録し、EditViewのカーソルオフセット位置を記録します.次回getViewを呼び出すときにこのレコードを同時に処理します.
2つのタグビットの定義
private int selectIndex = -1;// item
private int currentSelection = 0;//
次にgetViewにEditViewフォーカスの変化イベントを追加し、タグビットを記録します.
adHolder.edtPrice.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean arg1) {
if(arg1==false){
selectIndex = position;
currentSelection = ((EditText)view).getSelectionStart();
Log.i(TAG, "Item :"+position +", :"+currentSelection);
}
}
});
ビューを再描画するときに使用するタグビット
if(position == selectIndex){
adHolder.edtPrice.requestFocus();
adHolder.edtPrice.setSelection(currentSelection);
}