我有一个列表视图,其中每一行都是EditText,带有一些文本。当我点击一行时,EditText获得焦点,显示闪烁的光标和选择锚点(您知道拖动的蓝色/灰色外观手柄以选择一系列文本)。
问题是当我从一行移动到另一行(edittext到另一行)而没有引入新文本时,前一个edittext中的选择锚一段时间仍然可见。如果edittext没有焦点,我想立即隐藏这个锚。
有什么想法吗?
ClearFocus不起作用
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
} else {
editText.clearFocus();
//editText.clearComposingText();
}
}
});
截图
答案 0 :(得分:2)
我终于明白了!首先,我从ListView
中删除了可聚焦性。然后我写了一个自定义OnFocusChangeListener
,从失去焦点的视图中删除选择。此侦听器由自定义适配器应用于视图(我封装了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);
}
};
}