質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • Android

    6967questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4105questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Androidアプリ開発 ボタンの値の表示方法

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,558

YonamineTK

score 34

アプリ開発初心者

現在、添付画像の様なレイアウトで、
例えば、数字ボタン1をタップすると、画面中央の四角にタップしたボタンの値である1が
表示され、ボタン1、ボタン2をタップすると、12と表示されるアプリを作成しているのですが、
いまいち、Layoutとclassの結びつけかた等が分かりません。
よろしければ、このようなアプリのsampleを教えて下さい。

よろしくお願い致します。

---------------------------------------------------------------------------------------------------------

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class PurasuAct extends Activity implements View.OnClickListener {


    private final int btn0 = 0;
    private final int btn1 = 1;
    private final int btn2 = 2;
    private final int btn3 = 3;
    private final int btn4 = 4;
    private final int btn5 = 5;
    private final int btn6 = 6;
    private final int btn7 = 7;
    private final int btn8 = 8;
    private final int btn9 = 9;
    private final int clearbtn = 0;


    Button mButton[];

    int mId[] = {R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn3,
            R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7,
            R.id.btn8, R.id.btn9, R.id.clearbtn};


    TextView mTextView;

    /**
     * 前の処理
     */
    int beforeStatus = 0;

    /**
     * 合計
     */
    int total = 0;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.practice);

        // 表示用TextView
        mTextView = (TextView) findViewById(R.id.text7);

        // Button
        mButton = new Button[mId.length];

        
        for (int i = 0; i < mId.length; i++) {
            // buttonを取り込む
            mButton[i] = (Button) findViewById(mId[i]);
            // buttonのイベント処理
            mButton[i].setOnClickListener(this);
        }
    }

    @Override
    public void onClick(View v) {

        TextView text7  =   (TextView)findViewById(R.id.text7);

        // 押されたボタンがどのボタンかを判定
        for (int i = 0; i < mId.length; i++) {
            if (v.equals(mButton[i])) {
                // CLEAR
                if (i == clearbtn) {
                    mTextView.setText("");
                    total = 0;
                    beforeStatus = clearbtn;
                }
                // 数字
                else if (i < 10) {
                    String nowValue = mTextView.getText().toString();
                    nowValue = nowValue + i;
                    mTextView.setText(nowValue);
                    beforeStatus = i;
                }
                break;
            }
        }


        // 入力内容を取得
        String strNum = mTextView.getText().toString();


        // 数値に変換
        int num = Integer.parseInt(strNum);

        
        // 結果表示用テキストに設定
        text7.setText(Integer.toString(num));

        text7.setVisibility(View.VISIBLE);
    

    }

}


---------------------------------------------------------------------------------------------------------

開発環境
AndroidStudio1.2.2
実機:xperiaZL2 Android4.4.2

イメージ説明
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

コードのおかしな点は多少ありますが,これで文字が表示されないというのは妙ですね…
このtext7に設定されている文字の色が背景色と同じになってないか(白なら#FFFFFFになってたりしないか)確認してください.

余計なお世話かもしれませんが,この場合はStringBuilderを使ったほうがいいかもしれません.
入力のたびにTextViewからgetText()する必要がありません.
public class PurasuAct extends Activity implements View.OnClickListener {
    private StringBuilder sb = new StringBuilder();

    @Override
    public void onClick(View v){
        for(int i = 0; i < mId.length; i++){
            if(i == v.getId()){
                if(i == 10){
                    sb.delete(0, sb.length());  //sbが持ってる文字列を全消去
                } else {
                    sb.append(i);
                }
                mTextView.setText(sb);  //sbが持ってる文字列をmTextViewにセット
                beforeStatus = i;
                break;
            }
        }
    }

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/13 18:30

    回答ありがとうございます。
    すいません、確認したところ、
    AndroidManifestのactivity、android:name=""がMainActivityのままでした。
    android:name="PurasuAct"に書き換えると表示されるようになりました。
    ご迷惑おかけしました。
    swordoneさんの方法だと、結果表示用テキストの部分でエラーが表示されます。
    numの部分?は何に書き換えればよろしいでしょうか?

    キャンセル

  • 2015/10/13 21:00

    そもそも,
    ---
    // 入力内容を取得
    String strNum = mTextView.getText().toString();
    // 数値に変換
    int num = Integer.parseInt(strNum);
    // 結果表示用テキストに設定
    text7.setText(Integer.toString(num));
    text7.setVisibility(View.VISIBLE);
    ---
    この部分が完全に無駄です.
    元のコードでmTextViewとtext7は同一のTextViewを指しており,
    この部分でやっているのは
    1. このTextViewに収められてる文字列を取り出し
    2. それを数値に変換して
    3. 数値をまた文字列に変換してもとのTextViewに収める
    (結局もとの文字列と同じ文字列を入れているだけ)
    4. このViewが見える状態にする(もとからなってる)
    という,全く意味のないことをしています(数値もローカル変数なのでこのメソッドを抜けると破棄される).
    だから私のコードではその部分はありません.テキストの表示は
    //sbが持ってる文字列をmTextViewにセット
    の部分で終わっています.

    キャンセル

0

xmlを使ってLayoutを作成できたが、処理(Javaコード)との連携がわからないということでよいでしょうか。

ボタン(Button)を使用するには
テキストビュー(TextView)を使用するには

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/13 13:38 編集

    回答ありがとうございます。
    実際のコードを下記に記載致します。
    ボタンの値を表示するtext7に値が表示されません。
    何か書き換えるところがありますか?
    教えてください。

    キャンセル

  • 2015/10/13 14:54 編集

    上記のコードは質問に追記してください。

    「iとclearbtnの比較」と「break」のせいで必ずクリアボタンが押されたことになっています。
    // 押されたボタンがどのボタンかを判定
    for (int i = 0; i < mId.length; i++) {
    if (v.equals(mButton[i])) {
    // CLEAR
    if (i == clearbtn) {//clearbtnは0なのでi=0 の時に必ず満たす。
    mTextView.setText("");
    total = 0;
    beforeStatus = clearbtn;
    }
    // 数字
    else if (i < 10) {
    String nowValue = mTextView.getText().toString();
    nowValue = nowValue + i;
    mTextView.setText(nowValue);
    beforeStatus = i;
    }
    break;//必ずbreakがかかるのでi=0しか通っていない
    }
    }

    - mTextViewとtext7は同じidを指定しているのでどちらか一方でいいです。
    - Buttonを配列で持つ意味はありません。Buttonにはidがふられているため、onClick(View v)内では引数のvを使い、View#getIdで識別できます。
    - text7に文字を表示するタイミングで文字列(String)→数字(int)→文字列(String)と無意味な変換をしている箇所があります。
    - そもそもmTextViewとtext7の両方で表示文字列を変更する処理がありますが、どちらか一方にしたほうがいいでしょう。

    キャンセル

  • 2015/10/13 17:05

    問題の判定に入る前にv.equals(mButton[i])の判定が入るので必ずしもi=0で入るわけではないと思います.
    ただ現状,数字の0を入力した時もCLEARを押した時と同じ挙動になってしまいます.

    キャンセル

  • 2015/10/13 17:16

    見落としていました。
    現状、空文字が表示されるのであれば、下記でエラーが出ると思うんですが。
    int num = Integer.parseInt(strNum);

    本当にR.id.text7のTextViewの領域がとられているか、xmlでandroid:text="hoge"を入れてみてください。

    キャンセル

0

例を提示するのは簡単ですが、その場合理解できずに使ってしまう場合がありますので、ヒントを提示します。
まずは、ボタン1つとテキストビュー1つの状態でボタンを押した数だけテキストビューに文字が追加されるバージョンを作成するとよいと思います。

簡単に作るのならば、
1.フィールドにボタンとテキストボックスと表示するテキスト(String型)を宣言する。
2.onCreate()メソッドでfindViewsして、setOnClickListener()でクリックで動作するようにする
表示するテキストを念のため初期化しておく(""を代入する)
3.onClick()メソッドでv.getId()で押されたボタンのIDを確認する
これをfor文で行っていますが、10個程度のボタンならば、switch文で分岐させるとよいと思います。
4.一致したIDによって処理をする。
0~9が押された場合は表示するテキスト変数に+=演算子で値を追加する(ボタンのテキストをgetText()メソッドで取得でよいと思います)
クリアが押された場合は、""で初期化する
最後に表示するテキスト変数をテキストボックスにsetText()メソッドを用いてセットする

このような流れで作れると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/13 16:51

    10個もある状況でswitch使ったら読みづらくなるだけなのでやめたほうがいいです.
    むしろ配列中の位置と入力する数字が対応しているので今の状態がスマートでいいと思います.

    キャンセル

同じタグがついた質問を見る

  • Android

    6967questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4105questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。