关于java:Custom Keypad – 如何使这些按钮正常工作?

Custom Keypad — How to make these buttons functional?

我有一个我几乎完成的应用程序,这是一个记分牌应用程序。当用户对乐谱进行LongClick时,当前会出现一个对话框,其中显示带有"确定"和"取消"按钮的EditText字段。当用户单击EditText字段时,会出现一个键盘(仅限数字),用户在其中键入新乐谱,单击DONE,然后EditText字段在对话框中显示新值,当用户单击OK时,它将保存输入的值显示当前分数的TextView。

问题是我觉得这很麻烦。这就是我想要发生的事情:

  • 用户进行LongClick评分
  • 键盘出现
  • 用户输入新分数
  • 用户点击OK
  • 键盘消失,值保存到TextView,更新当前分数。
  • 为了做到这一点,我想到了两件事:

  • 我可以创建一个扩展View的新类 - 我对android来说太新了,无法真正理解这个选项。
  • 我可以用一个设计类似键盘的新XML文件替换对话框中的EditText。
  • 选项2:我认为这可能是最简单的,所以我设计了XML Layout并将其命名为keypad.xml。现在,当用户执行LongClick时,keypad.xml文件会在OK和CANCEL的对话框中膨胀。到现在为止还挺好。但是,我不知道应该在哪里放置按钮操作的代码。

    起初我想,我可以设置一些onClick监听器,它适用于布局中的所有按钮。我认为所有按钮都将执行完全相同的功能。基本上,从按钮获取文本(在这种情况下为0-9)并将其附加到键盘正上方的TextView。然后,当用户单击"确定"时,将keypad.xml中的T??extView保存到当前得分textview。

    任何人都可以帮我指出正确的方向来实现这一目标吗?

    这是keypad.xml的屏幕截图(数字上方有一个空的TextView):
    enter image description here

    这是XML代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?xml version="1.0" encoding="utf-8"?>
    <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="fill"
    android:columnCount="3">

    <TextView
        android:id="@+id/textView1"
        android:layout_columnSpan="3"
        android:layout_gravity="fill"
        android:gravity="right|center_vertical"
        android:textSize="24sp" />

    <Button android:text="1" />

    <Button android:text="2" />

    <Button android:text="3" />
    <Button android:text="4" />
    <Button android:text="5" />
    <Button android:text="6" />
    <Button android:text="7" />
    <Button android:text="8" />
    <Button android:text="9" />

    <Button
        android:layout_columnSpan="3"
        android:layout_gravity="fill"
        android:gravity="center"
        android:text="0" />


    这个问题似乎没有引起回应。 如果有人正在寻找这个问题的答案,我已经提出了另一种解决方案,这种解决方案并不完全相同,但仍然有效。

    请看这个问题。