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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Android

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

Android Studio

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

Q&A

解決済

3回答

9187閲覧

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

YonamineTK

総合スコア42

Android

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

Android Studio

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

0グッド

0クリップ

投稿2015/10/13 02:46

編集2015/10/13 09:08

アプリ開発初心者

現在、添付画像の様なレイアウトで、
例えば、数字ボタン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

イメージ説明

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

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

余計なお世話かもしれませんが,この場合はStringBuilderを使ったほうがいいかもしれません.
入力のたびにTextViewからgetText()する必要がありません.

java

1public class PurasuAct extends Activity implements View.OnClickListener { 2 private StringBuilder sb = new StringBuilder(); 3 4 @Override 5 public void onClick(View v){ 6 for(int i = 0; i < mId.length; i++){ 7 if(i == v.getId()){ 8 if(i == 10){ 9 sb.delete(0, sb.length()); //sbが持ってる文字列を全消去 10 } else { 11 sb.append(i); 12 } 13 mTextView.setText(sb); //sbが持ってる文字列をmTextViewにセット 14 beforeStatus = i; 15 break; 16 } 17 } 18 }

投稿2015/10/13 08:24

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YonamineTK

2015/10/13 09:30

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

2015/10/13 12: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にセット の部分で終わっています.
guest

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 07:02

tttsak

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2015/10/13 07:51

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

0

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

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

投稿2015/10/13 04:11

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YonamineTK

2015/10/13 09:07 編集

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

2015/10/13 05:58 編集

上記のコードは質問に追記してください。 「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の両方で表示文字列を変更する処理がありますが、どちらか一方にしたほうがいいでしょう。
swordone

2015/10/13 08:05

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

2015/10/13 08:16

見落としていました。 現状、空文字が表示されるのであれば、下記でエラーが出ると思うんですが。 int num = Integer.parseInt(strNum); 本当にR.id.text7のTextViewの領域がとられているか、xmlでandroid:text="hoge"を入れてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問