スコアボードアプリである、ほぼ完成したアプリがあります。ユーザーがスコアをLongClickすると、現在ダイアログボックスが表示され、[OK]ボタンと[キャンセル]ボタンが付いた[テキストの編集]フィールドが表示されます。ユーザーが[編集テキスト]フィールドをクリックすると、キーパッドが表示され(数字のみ)、ユーザーが新しいスコアを入力し、[完了]をクリックすると、[編集テキスト]フィールドにダイアログボックスに新しい値が表示され、ユーザーが[OK]をクリックすると、入力した値が保存されます。現在のスコアを表示するTextViewに移動します。
問題は、それが面倒だと感じることです。これが私がしたいことです:
- ユーザーがスコアをLongClickします
- キーパッドが表示されます
- ユーザーが新しいスコアを入力します
- ユーザーが[OK]をクリックします
- キーパッドが消え、値がTextViewに保存され、現在のスコアが更新されます。
これを達成するために、私は2つのことを考えました。
- Viewを拡張する新しいクラスを作成することができます-私はAndroidに慣れていないため、このオプションを実際に理解することはできません。
- ダイアログのEditTextを、キーパッドのように設計された新しいXMLファイルに置き換えることができます。
オプション2:これがおそらく最も簡単だと思ったので、XMLレイアウトを設計し、keypad.xmlと呼びました。これで、ユーザーがLongClickを実行すると、keypad.xmlファイルが[OK]と[キャンセル]のダイアログで膨らみます。ここまでは順調ですね。ただし、ボタンアクションのコードをどこに配置すればよいかわかりません。
最初は、レイアウト内のすべてのボタン用のonClickリスナーを設定できると思いました。私は、すべてのボタンがまったく同じ機能を実行することになると考えました。基本的に、ボタン(この場合は0〜9)からテキストを取得し、キーパッドのすぐ上にあるTextViewに追加します。次に、ユーザーが[OK]をクリックしたら、keypad.xmlのTextViewを現在のスコアtextviewに保存します。
誰かがこれを達成するために私を正しい方向に向けるのを手伝ってもらえますか?
これがkeypad.xmlのスクリーンショットです(数字の上に空のTextViewがあります):
XMLコードは次のとおりです。
<?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" />