我有一个EditText
,我将View
用作ListView
的页脚// in onCreate
// ...
// the footer
View v = getLayoutInflater().inflate( R.layout.comment_edittext, null );
EditText commentEditText = (EditText)v.findViewById( R.id.comment_edittext );
commentEditText.setOnFocusChangeListener( new OnFocusChangeListener() {
@Override
public void onFocusChange( View v, boolean hasFocus )
{
U.log("View: " + v.getClass().getName().toString() );
if( hasFocus )
{
U.log( "Clicked" );
}
else
{
U.log( "Un Clicked" );
}
}
} );
// add the footer
commentListView.addFooterView( v );
// ...
。我试图访问焦点/失去焦点事件,但出于某种原因,它会在每个焦点上多次触发。这是怎么回事?
04-11 10:22:17.449: E/004 - X(4576): View: android.widget.EditText
04-11 10:22:17.459: E/004 - X(4576): Clicked
04-11 10:22:17.569: E/004 - X(4576): View: android.widget.EditText
04-11 10:22:17.569: E/004 - X(4576): Un Clicked
04-11 10:22:17.569: E/004 - X(4576): View: android.widget.EditText
04-11 10:22:17.569: E/004 - X(4576): Clicked
04-11 10:22:17.689: E/004 - X(4576): View: android.widget.EditText
04-11 10:22:17.689: E/004 - X(4576): Un Clicked
04-11 10:22:17.709: E/004 - X(4576): View: android.widget.EditText
04-11 10:22:17.709: E/004 - X(4576): Clicked
单次触摸的输出,它会调出键盘:
hasFocus
我可以理解它调用true
设置为false
的多个事件,但为什么还有Un Clicked
s,触发ListView
日志?
编辑:此外,每当我向上和向下滚动EditText
,将{{1}}移入和移出视图时,它也会调用这些事件。我可能使用了错误的监听器类型吗?
答案 0 :(得分:1)
从个人经验来看,ListViews中的EditTexts是一个祸根。由于视图的回收和渲染方式,焦点表现得很奇怪。我建议以其他方式解决问题。实际上,如果它是一个评论文本框,如果它总是可见的话会不会更好?
示例布局:
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
答案 1 :(得分:1)
使用GridView代替并给出numColumns为1.如果你不喜欢它在java类中的读取方式,请将它们存储为AbsListView(并将它们保存为xml中的GridView)。
ListView是EditTexts的错误,GridViews缺少这些问题。
答案 2 :(得分:0)
使用grideview和numColumns为1是解决问题的最佳方法。我试过并解决了我的问题。