Android - ListView EditText焦点问题

时间:2012-04-11 15:27:29

标签: java android listview focus android-edittext

我有一个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}}移入和移出视图时,它也会调用这些事件。我可能使用了错误的监听器类型吗?

3 个答案:

答案 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是解决问题的最佳方法。我试过并解决了我的问题。