如何在 KeyLongPress 上更改 TextView 文本?

How to change TextView text onKeyLongPress?

我想弄清楚如何在长按按键时更改文本视图文本。我附上了一个屏幕截图,希望能解释我正在尝试做什么。

Phone App Picture

绿色+10.00 的价格table。我希望能够按住每个价格并弹出键盘来编辑文本字段。我是编程新手,发现很难搜索合适的术语。

到目前为止我为此尝试过的代码是:

(1..912).forEach {
        val id = resources.getIdentifier("Price$it", "id", packageName)
        val tv = findViewById<TextView>(id)
        when {
            onKeyLongPress(id, setText()) -> tv.text.getText()
            }
        }

有 912 个价格,我将它们分组以参考每个价格。而不是试图对个别价格应用任何代码。我知道 onKeyLongPress() 的用法不正确。我这样说是为了帮助我理解我想做什么,即使那行不通。通过按键阅读参考 material 让我感到困惑。我不知道从这里去哪里任何信息都非常感谢。谢谢你的时间。

Android 有一个用于编辑文本的特定视图:EditText

在您的情况下,您应该实现 EditText,它将弹出键盘和光标。

对于长按动作,你应该实现onLongClickListener:

textView.setOnLongclickListener {
    // [ Let the EditText pop up here ]
    // ....
    true // Return value for the onLongClick function
};

我建议在 ListView 适配器 class(或 RecyclerViewAdapter)中的 getView() 或 onBindViewHolder() 方法中实现 onLongclickListener。 Here 是一个详细的例子。

下一步您要做的是启用 EditText,以便用户可以键入内容。这个函数应该放在上面的代码片段中。 ("Let the EditText pop up here" 部分。)

您可以选择的选项有:

  1. 创建一个带有 EditText 的警告对话框。用户键入内容并单击 "Okay" 后,对话框将关闭,您只需将该用户输入传递给用户最初按下的 TextView。对于带有 EditText 的 AlertDialog,您可以找到有用的示例 here

  2. 将EditText重叠在TextView之上,并设置EditText的可见性为View.INVISIBLE。当用户长按TextView时,可以将EditText的可见性设置为View.VISIBLE,这样EditText对用户可见,允许键盘输入。用户完成输入后,他们可以单击键盘上的 "DONE" 按钮或任何等效按钮,然后您可以再次将 EditText 的可见性设置为 View.INVISIBLE。确保检索 EditText 值并将其设置为您的 TextView。