Mono for Android:Listview滚动问题与微调器和编辑文本

时间:2013-01-31 10:55:03

标签: android listview android-edittext xamarin.android spinner

我的问题出在两个方面。

第一期:滚动健忘症

我有一个带有微调器和编辑文本的ListView。它从webservice获取它的数据。问题是当我在EditText上写一个值或为旋转器选择一些东西并将它们滚出视图时。当我回来时,字段为空,旋转器再次处于默认选择状态。

尝试解决方案 我尝试通过将ScrollingCacheEnabled编程和AXML文件中的设置为true和false来解决问题,以查看是否存在问题。似乎没有任何影响。

第二期:焦点丢失

当我在同一个ListView中触摸EditText时,我会让键盘出现,但是我将焦点放在了场上,需要再次触摸才能获得焦点,这样我就能写出来。

尝试解决方案 我摆弄着那些可以聚焦的领域,Focusavle在toucmode,可触摸和诸如此类的东西,但空手而归。

老实说,我对Android以及这个级别的编程都很陌生,但我在这方面做得最好。我可能因为缺乏知识而错过了一些东西,或者只是有经验的人可以解决和解决的问题。 第二个问题现在并没有那么糟糕(仍然填写了很多字段后,它确实让它累了两次......)但滚动问题是必须的。

2 个答案:

答案 0 :(得分:1)

我认为您的问题与您在更改包含它们的Adapter时忘记更新View中的项目有关。因此,您需要连接View的事件以更新项目。

为什么呢?如果您仔细查看Adapter ListView,则会使用convertView的值填充GetItem(position)。因此,如果该项目未反映您对View所做的更改,则您必须获得该项目的初始值。

所以你需要做的是连接SpinnerValue.ItemSelected和所有其他可以改变事件的View,以便Adapter中的项目更新它们的值。请记住,只在首次创建View时添加事件处理程序。这就是convertView为空的时候。

还要考虑更改行:

if (SpinnerValue.Adapter.Count.Equals(2))
{
    SpinnerValue.SetSelection(1);
}

基于适配器中的项目,而不是每次都将其设置为1.

你关注的焦点问题的基础是,ListView并不是因为View内部的ListView想要获得焦点。当您将DecendantFocusability实例化为DescendantFocusability.AfterDescendants时,请尝试设置lstPrevzem.DescendantFocusability = DescendantFocusability.AfterDescendants; {{1}}:

{{1}}

答案 1 :(得分:0)

我通过用LinearLayout替换listview并将适配器固定到它来解决了这个问题。 “固定”代码在pastebin上可用。

固定代码:

http://pastebin.com/vn3SPrFz