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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

Android Widget

ホームスクリーンウィジェット、またはAndroidアプリケーションのスクリーン上で使用される一般的なユーザインタフェース要素に関連することを指します。

Q&A

0回答

1765閲覧

android studio のButtonIDをString型で取得したい

kubonos

総合スコア6

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

Android Widget

ホームスクリーンウィジェット、またはAndroidアプリケーションのスクリーン上で使用される一般的なユーザインタフェース要素に関連することを指します。

0グッド

0クリップ

投稿2019/12/26 08:12

編集2022/01/12 10:55

android studioでクイズゲーム作ってます。

xmlで設置した

<Button android:id="@+id/answerBtn1"/>

としているボタンの中のandroid:id="@+id/answerBtn1"を、javaの中でString型として使う方法はありますでしょうか?

javaの中で
answerBtn1
というテキストとして、扱いたいのです。

android:text="A"
は、Aを別の処理に使っているので、

android:id="@+id/answerBtn1
の「answerBtn1」というのを、正解判定の処理に使いたくて、処理をどうしたら良いのか悩んでいます。

https://teratail.com/questions/216639
に全く同じ質問があり、

public String getResourceName (int resid)
を入力すれば、いいのかなと思ったのですが、エラーが出て、色々とやってみているのですが全く処理できません・・・

<やってみたこと>

//どのボタンが押されたか
Button answerBtn = findViewById(view.getId());

//IDをストリングで取得・・・ここがうまくいきません
String btnId = answerBtn.getId().toString();としてみたのですが
//エラー: intは間接参照できませんというエラーが出ています。

現在は、android:text="A"のテキストカラーを00000000の透明色にして、クイズの正誤判定に対応しているのですが、ボタンのtextは後から使う予定なので、なんとかIDなどで処理できないかなと思っています。

テキストと違っていても、正解、という問題が混じっているため、正誤判定と、実際の答えはこれ!という表示が2通り必要なのです。

android:text
でないもので、かつ、String型で参照できるものでも良いのですが・・

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"

android:layout_height="fill_parent" tools:context=".MainActivity" android:orientation="vertical" android:gravity="center_horizontal" android:background="@android:color/white"> <ImageView android:id="@+id/questionImage" android:layout_width="300dp" android:layout_height="200dp" android:src="@drawable/a"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:gravity="center_horizontal" > <Button android:id="@+id/answerBtn1" android:layout_width="60dp" android:layout_height="60dp" android:onClick="checkAnswer" android:text="c" /> </LinearLayout>
</LinearLayout>

package com.te.gazouonseijava;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class MainActivity extends AppCompatActivity {

private TextView countLabel; private ImageView questionImage; private Button answerBtn1; private Button answerBtn2; private Button answerBtn3; private Button answerBtn4; private Button answerBtn5; private Button answerBtn6; private Button answerBtn7; private Button answerBtn8; private Button answerBtn9; private Button answerBtn10; private Button answerBtn11; private Button answerBtn12; private String rightAnswer; //String文字型であることに注目したい private int rightAnswerCount = 0; //初期化=定義 private int quizCount = 1; //初期化=定義 static final private int QUIZ_COUNT = 50; //全部の出題数を入れるのだ!! private int randomNum; //これで{}をまたげる

//private int randomNum;は死ぬほど重要です

ArrayList<ArrayList<String>> quizArray = new ArrayList<>(); String quizData[][] = {

//{"画像名","正解"},
//,←これ[,]が必要なんだ!!!
{"a","a"},
{"b","b"},

}; MySound mySound = new MySound(); // ① サウンド準備 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ② 効果音の準備wavだけどmp3sで定義されている。クイズデータと同じ並びで並べる int[] mp3s = { R.raw.a, //[0] R.raw.b, //[1] R.raw.c, //[2] };

//ここに音声を、クイズと全く同じ順番で並べましょう!!!!!!【追加していく2/2】

mySound.onCreate(this, mp3s); // ③ 初期化、言葉がまぎらわしいがただ定義(代入)しただけ questionImage = findViewById(R.id.questionImage); answerBtn1 = findViewById(R.id.answerBtn1);

//quizDataからクイズ出題用のquizArrayを作成する
for (int i = 0; i < quizData.length; i++) {

//新しいArrayListを用意
ArrayList<String> tmpArray = new ArrayList<>();
//クイズデータを追加
tmpArray.add(quizData[i][0]); //画像名

//tmpArrayをquizArrayに追加する
quizArray.add(tmpArray);
}

showNextQuiz(); } public void showNextQuiz() {

//クイズカウントラベルを更新
countLabel.setText("Q" + quizCount);

//ランダムな数字を取得
Random random = new Random();
int randomNum = random.nextInt(quizArray.size());

//randomNumを使ってquizArrayからクイズを一つ取り出す
ArrayList<String> quiz = quizArray.get(randomNum);

//画像をセットする
questionImage.setImageResource(
getResources().getIdentifier(quiz.get(0), "drawable", getPackageName())
);

//正解をrightAnswerにセット
rightAnswer = quiz.get(1);

} public void checkAnswer(View view){

//どのボタンが押されたか
Button answerBtn = findViewById(view.getId());

//ボタンのIdをテキストで取得・・・ここが分かりません
String btnId = answerBtn.getId().toString(); //エラー: intは間接参照できませんというエラーが

String alertTitle; if (btnId.equals(rightAnswer)) { //ここをボタンID=rightAnswerに変えたい alertTitle = "せいかい!!"; rightAnswerCount++; } else { alertTitle = "まちがっているよ"; } //if elseの波かっこ群終了

//ダイアログを作成
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(alertTitle);
builder.setMessage("こたえは" + rightAnswer + "だよ");
builder.setPositiveButton("つぎへいく", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (quizCount == QUIZ_COUNT) {
//結果画面へ移動
Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
intent.putExtra("RIGHT_ANSWER_COUNT", rightAnswerCount);
startActivity(intent);

} else { quizCount++; showNextQuiz(); //showNextQuiz実行する } //elseとじ } //160行付近のpublic void onClick(DialogInterface dialog, int which) とじ }); //"つぎへいく"のsetPositeveButton とじ builder.setCancelable(false); builder.show(); } // checkAnswer波かっことじ

} //大きいMainとじ

android:id="@+id/answerBtn1"
のanswerBtn1をString型で参照できれば、嬉しいです。

String btnId = answerBtn.getText().toString();  //エラー: intは間接参照できません

ここの部分の、idをjavaでString型で参照する、書き方を知りたいです。

こんな感じに書いてみれば?みたいなサンプルコードをいただけると助かります・・。

1~2行で良いので、具体的なサンプルコードをいただけませんでしょうか?

大変申し訳ございませんが、javaの理解力が低いため、サンプルコードをよろしくお願いいたします。

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

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

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

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

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

y_waiwai

2019/12/26 08:16

ざんねんながら、コード作成依頼は受け付けてません。 あなたが色々やったというコードを提示しましょう
jimbe

2019/12/27 10:20

コードが中途半端で, ご説明されている機能がどこでどうなっているのか分かりません. せめて1問でもクイズの出題まで動作させてください. answerBtn が 12 個も宣言されているのに, layout には 1 つしかボタンはありません. どれが正解のボタンで, それ以外のボタンも含めてテキストに何が設定され, 「テキストと違っていても、正解、という問題が混じっているため」という状況になっているのか, コードとして示して頂けませんか.
Gonnnn

2020/01/13 03:33

やりたいことがよくわからないのですが。。。 ボタンなどのViewに複数のデータを持たせたいなら、Tagをつけるか、自分でカスタムビューを作るのがいいと思いますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問