我必须在对话框上显示ListView包含EditText,用户可以在其中键入EditText中的文本,其内容不应丢失。
例如,我在列表视图中有10个EditText,如果用户在第一个EditText中键入"11",在第二个EditText中将键入"22",在在第三个EditText键入"33",并在第十个EditText处向下滚动列表视图,然后用户在第一次EditText处再次向上滚动,则第一个EditText中的值应为"11",当文本在EditText中发生更改时,我通过设置EditText实现了这一点。
我使用NiftyDialog作为对话框(链接)。问题是EditText的焦点是随机的(有时有效,有时无效)。
我已设置
android:descendantFocusability="afterDescendants"
在ListView中并设置
android:windowSoftInputMode="adjustPan"
在清单文件中,但工作不正常。
这里可能有什么问题?
不久前,我在EditText
焦点上遇到了这个问题,并意识到仅仅在现有视图上设置属性是行不通的。在我的情况下,这是为了避免键盘弹出,但我相信,同样的解决方案也适用于您的情况。
在所有其他视图之上添加一个具有android:focusable="true"
和android:focusableInTouchMode="true"
的伪布局。这样,焦点将转到这个布局(位于顶部),ListView
中EditText
的随机焦点问题将得到解决。
<!-- Stop auto focussing the EditText -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/transparent"
android:focusable="true"
android:focusableInTouchMode="true">
</LinearLayout>
使用另一个大小为10的字符串类型列表,并将每个字符串的初始值留空。现在在edittext和onTextchange方法上添加一个textwatcher,为该特定位置重新分配列表中的字符串值。请提供您的适配器代码来执行剩余的
您是否明确请求EditText的焦点?如myEditText.requestFocus()
从你的问题来看,你似乎希望随着用户向下滚动,重点编辑文本发生变化。你能澄清一下你期望的行为以及发生了什么吗?