Android ListViewでEditViewの再フォーカス取得

2046 ワード

質問:ListViewでEditViewを使用し、初めてEditViewにフォーカスしたときにキーボードをポップアップします.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);
}