首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ListView行失去焦点

ListView行失去焦点
EN

Stack Overflow用户
提问于 2013-02-01 16:56:27
回答 1查看 1.3K关注 0票数 0

我遇到了一个问题,EditText在ListView中是连续的。

用户可以在EditText中输入多行文本。每个新行都会导致Row展开,而ListView则会刷新/更新。

我如何才能:

  • ( A)防止列表视图作为一个整体更新?
  • ( B)将列表视图重新聚焦到前一个文本视图的位置(视图被回收)
  • ( C)更好的办法?

我试过:

  • 子类ListView和设置选择OnSizeChanged、OnFinishInflate等。
  • 截取编辑文本的焦点丢失和重置列表选择在那里。(问题是视图被回收)

目前使用:

  • MonoDevelop 3.0.6
  • 用于Android的Mono : 4.4.55
  • Android : 4.0 (API级别14)
EN

回答 1

Stack Overflow用户

发布于 2013-02-01 19:10:19

尝试在DescendantFocusability上播放ListView属性。我认为将其设置为DescendantFocusability.AfterDescendants,可能会解决焦点和调整大小的问题。

它适用于我的小样本:

MainActivity.cs

代码语言:javascript
运行
复制
using Android.App;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace ListViewTests
{
    [Activity(Label = "ListViewTests", MainLauncher = true, Icon = "@drawable/icon")]
    public class Activity1 : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            var lv = FindViewById<ListView>(Resource.Id.listView);
            lv.Adapter = new ArrayAdapter(this, Resource.Layout.ListViewItem, Resource.Id.textView, new [] {"1", "2"});
            lv.DescendantFocusability = DescendantFocusability.AfterDescendants;
        }
    }
}

ListViewItem.axml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
  <TextView
    android:id="@+id/textView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
  <EditText
    android:id="@+id/editText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
</LinearLayout>

然而,您的问题是视图被回收可能需要一些更多的工作。您需要以某种方式保存视图的状态,并在视图再次创建时恢复状态。因此,对于适配器中的每个项,您需要连接到视图的事件。也就是说,对于EditText,您希望连接到TextChangedAfterTextChanged,以获取包含的文本并将状态保存到某个地方。这可能是您正在显示的适配器中的项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14651266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档