5

我有一个列表视图,其中每一行都是一个 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

我终于明白了!首先,我从ListView. 然后我写了一个自定义OnFocusChangeListener,从失去焦点的视图中删除选择。此侦听器通过自定义适配器应用于视图(我包装了ArrayAdapter,但您也可以包装 a 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 回答