5

各行が EditText で、テキストが含まれるリストビューがあります。行をタップすると、EditText がフォーカスを取得し、点滅するカーソルと選択アンカーが表示されます (テキストの範囲を選択するためにドラッグする青/灰色のハンドルを知っています)。

問題は、新しいテキストを入力せずに、ある行から別の行に移動する (edittext から別の行に移動する) と、前の edittext の選択アンカーがしばらく表示されたままになることです。edittext にフォーカスがない場合、このアンカーをすぐに非表示にしたいと思います。

何か案は?

ClearFocus 動作しません

        editText.setOnFocusChangeListener(new OnFocusChangeListener() {             
            public void onFocusChange(View v, boolean hasFocus) {
                if(hasFocus) {

                } else {
                    editText.clearFocus();
                    //editText.clearComposingText();                        
                }
            }
        });

スクリーンショット

問題

4

1 に答える 1

2

やっと手に入れた!まず、フォーカス可能性をから削除しましたListViewOnFocusChangeListener次に、フォーカスを失うビューから選択を削除するカスタムを作成しました。このリスナーは、カスタムアダプターによってビューに適用されます(ArrayAdapterラップしましたが、ラップすることもできますSimpleCursorAdapter)。

添付されているのはデモです(Eclairを使用したエミュレーターでテスト済み):

public class ListOfEditViews extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ListView list = new ListView(this);
        list.setAdapter(getAdapter());
        list.setFocusable(false);
        list.setFocusableInTouchMode(false);

        setContentView(list);
    }

    private ListAdapter getAdapter() {
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.edit_text, R.id.text) {

            @Override
            public View getView (int position, View convertView, ViewGroup parent) {
                View view = super.getView(position, convertView, parent);
                view.setFocusable(true);
                view.setFocusableInTouchMode(true);
                view.setOnFocusChangeListener(listener);
                return view;
            }
        };

        String words = "Lorem ipsum dolor sit amen";

        for (String word: words.split(" "))
            adapter.add(word);

        return adapter;
    }

    private OnFocusChangeListener listener = new OnFocusChangeListener() {

        public void onFocusChange(View view, boolean hasFocus) {
            view.dispatchWindowFocusChanged(hasFocus);
        }
    };
}
于 2012-10-31T00:10:15.303 に答える