【问题标题】:Weird behavior with selectAllOnFocus when EditText is in ListView当 EditText 在 ListView 中时 selectAllOnFocus 的奇怪行为
【发布时间】:2013-08-09 12:32:48
【问题描述】:

这个问题已经困扰我一段时间了。我有一个列表视图,每一行都有三个 EditText,用户可以在其中输入数据。当用户选择一个编辑框时,文本应该被选中,所以当他键入第一个键时,之前的文本被删除。

当 selectAllOnFocus 选项设置为 true 时,这一切都可以完美运行。当我必须调用 notifyDataSetChanged 时会出现问题。每一行都有一个用于删除该行的按钮,这就是我调用适配器的 notifyDataSetChanged 方法的时候。在此之后,当用户选择 EditBox 时,它不会选择整个文本,而是将光标设置在文本的左侧,并在光标下方显示一个箭头。

我尝试在代码和布局文件中设置 selectAllOnFocus,但没有成功。

我应该尝试什么?我错过了什么吗?

我尝试禁用焦点更改事件,但没有成功。

谢谢!

【问题讨论】:

    标签: java android android-listview focus android-edittext


    【解决方案1】:

    您试图实现的预期行为是什么?

    编辑:

    为什么不尝试手动触发两次点击事件。它是一个有点 hacky 的解决方案,但如果它有效,那么谁在乎。您可以做的是从列表视图中获取您希望在其中选择文本的视图,然后像这样在帖子中触发两次点击

    myEdit.post(new Runnable(){
    
        public void run() 
      {
        myEdit.performClick();
        myEdit.performClick();
      }
    
    }
    

    使用该帖子将确保在您的 listview 适配器上调用 invalidate 后视图重新膨胀后触发事件

    【讨论】:

    • 仔细阅读问题 :) 当用户选择一个 EditText 时,整个文本被选中并弹出键盘。这就是我想要的,但它并不总是那样工作。有时(通常在键盘可见后)当用户选择不同的 EditText 时,它不会选择(突出显示)整个文本,而是只关注控件的最左侧,并且光标下方会显示一个箭头。
    • 对不起,如果我不够清楚,如果您认为可以改进,请编辑问题。如果您需要更多详细信息,请告诉我。谢谢
    • 所以你想让光标定位到文本的末尾?
    • 不,我希望当键盘出现以及用户在另一个 EditText 中更改焦点时选择(突出显示)EditText 中的整个文本。我注意到的是,在我在适配器上调用 notifyDataSetChanged 之前,这一切正常。
    • 我找到了解决方案。查看我的答案,让我知道它是否有问题。不过,它正在工作:)
    【解决方案2】:

    由于每当我调用 adapter.notifyDataSetChanged() 时都会发生这种情况,我想我应该尝试绕过它。这就是我最终要做的:

    adapter.clear();     
    adapter = new AdapterOfWhateverItemsTypeIs(this, items);
    listview.setAdapter(adapter);   
    adapter.notifyDataSetChanged();
    

    在此之后,我得到了 EditText 的 selectAllOnFocus 选项的预期行为。

    【讨论】:

      猜你喜欢
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多