listview中的Android edittext失去了对notifydatachanged的调用

g t*_*g t 19 android android-edittext

我在listview中有一些edittext.我在edittext上有一个通用的focuslistener,可以通过调用notifydatachanged来更新数据模型的值以及当焦点丢失时edittext的背景.问题是如果其中一个edittext持有焦点,当我触摸下一个edittext时,它会暂时获得焦点然后失去焦点.我怀疑这是由于notifydatachanged方法调用导致重绘所有视图,之后焦点丢失.有没有人有关于这个问题的建议或解决方法?谢谢.

Sam*_*udd 19

确实发生了这种情况,因为所有视图都被重新绘制,因此表示用于聚焦的任何行的编辑文本现在是完全不同的对象.在适配器中设置一个变量:int currentFocusedRow;

在适配器的getView中:为每个编辑文本添加onFocusChanged侦听器,当该编辑文本获得焦点时,设置currentFocusedRow =焦点编辑文本恰好位于的任何行.还要设置要聚焦的currentFocusedRow中的任何编辑文本.

  • 我有同样的问题,并了解解决方案,但无法得到这个工作 - 相对新手Android,但所以任何指针/代码将是一个很大的帮助.任何坚持一些代码的机会 - 尤其是onFocusedChanged监听器.提前致谢. (2认同)

小智 18

android:windowSoftInputMode="adjustPan"
Run Code Online (Sandbox Code Playgroud)

对于您在AndroidManifest.xml中的活动

  • 这适用于焦点,但如果列表长于屏幕并且您开始键入,则EditText字段将移出用户的可见区域,因此一旦他开始输入第一个,他就看不到他实际键入的内容字符.(Android 4.1) (9认同)
  • tihs为我工作,但我不知道为什么或问题是什么:/ (2认同)

Y2i*_*Y2i 6

我也有一个EditText失去焦点的问题,但是调用setDescendantFocusability(ListView.FOCUS_AFTER_DESCENDANTS)解决了它.

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    final ListView lv = getListView();
    lv.setDescendantFocusability(ListView.FOCUS_AFTER_DESCENDANTS);
}
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于列表中的一个EditText,但是如果每个列表项都有这样的EditText元素,并且我单击第二行中的EditText,则焦点 - 在显示软键盘之后 - 将位于*first的EditText中*列表行,但它应该在*秒*.(Android 4.1) (6认同)