Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

AndroidStudioでのボタンクリックについて

AndroidStudioを使ってみようみようと思って始めてみましたが、
TextViewとButtonの配置しただけで詰まってしまいました。
この後にButtonをクリックした際にTextViewの文字列を変化させようと思っていますが、
何度やってもエラーとなってしまいうまくいきません。

いくつかのサイトを確認した結果、
MainActivity.javaへ記述が必要と判断しましたが、うまくいきません。
知見のある方ご教示のほどよろしくお願いします。

[質問事項]
1.TextViewの配置が間違っているのでしょうか?
2.Buttonの配置が間違っているのでしょうか?
3.TableLayoutの配置が間違っているのでしょうか?
4.ボタンをクリックした際の挙動はどう書いたらよろしいのでしょうか?
5.もし初心者でもわかりやすいサイトがあればお願いいたします。
(サイトにプロパティを出すとか書いてあってもその方法すらわからない状況です)

[以下うまくいっていると思われる現状のソース]
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
    tools:context=".MainActivity">

    <TableLayout
        android:id="@+id/tablelayout1"
        android:layout_width="100dp"
        android:layout_height="250dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="ExtraText">

        <TableRow
            android:id="@+id/tablerow1"
            android:layout_width="50dp"
            android:layout_height="50dp" />
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/textview1" />

        <TableRow
            android:id="@+id/tablerow2"
            android:layout_width="50dp"
            android:layout_height="50dp" />
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button1" />
    </TableLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

strings.xml

<resources>
    <string name="app_name">Button_Test</string>
    <string name="textview1">テキスト1</string>
    <string name="button1">ボタン1</string>
</resources>
0

2Answer

MainActivity.javaの内容とエラー内容が分からなければアドバイスのしようがないかと思います。

また、TableLayoutのTableRowは

        <TableRow
            android:id="@+id/tablerow1"
            android:layout_width="50dp"
            android:layout_height="50dp" >
            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/textview1" />
        </TableRow>

のように行にしたい箇所を上下で囲うものです。

0Like

Comments

  1. @daifu9mogumogu

    Questioner

    回答ありがとうございます。
    同じエラーを発生させてエラーメッセージを出力させようと思いましたが、
    まずはご指摘の事項を反映してTableRowの記述を下記のように修正してみました。

    今まで実機で確認をしていましたが、なぜかペアリングがうまくいかずの状態になってしまったので、エミュレータを使って動作を見ようと思ったところ
    エラーとなってしまいました。

    ---
    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
    tools:context=".MainActivity">



    <TableLayout
    android:id="@+id/tablelayout1"
    android:layout_width="100dp"
    android:layout_height="250dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:ignore="ExtraText">

    <TableRow
    android:id="@+id/tablerow1"
    android:layout_width="50dp"
    android:layout_height="50dp">
    <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/textview1" />
    </TableRow>


    <TableRow
    android:id="@+id/tablerow2"
    android:layout_width="50dp"
    android:layout_height="50dp">
    <TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/textview2" />
    </TableRow>

    <TableRow
    android:id="@+id/tablerow3"
    android:layout_width="50dp"
    android:layout_height="50dp">
    <TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/textview3" />
    </TableRow>

    <TableRow
    android:id="@+id/tablerow4"
    android:layout_width="50dp"
    android:layout_height="50dp">
    <TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/textview4" />
    </TableRow>

    <TableRow
    android:id="@+id/tablerow5"
    android:layout_width="50dp"
    android:layout_height="50dp">
    <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button1" />
    </TableRow>
    </TableLayout>


    </androidx.constraintlayout.widget.ConstraintLayout>
    ---

Android Studioを2年前に少し使用していましたのでお力になれればと思い返信させて頂きます。私自身初心者なのでうまく説明できるかわかりませんが。。。

<質問事項について>
問1-3:
これらについては恐らく間違っていないのではと考えます。Designタブを使用して構成したのであれば尚可能性は低いかと思います。

問4:ボタンをクリックした際の挙動はどう書いたらよろしいのでしょうか?
これは何をしたいかによりますので、いったんは「ボタンをクリック→簡単な動作」のテストをしてみると良いと思います。段々とこの動作をアレンジしていけば良いと思うので。
挙動はMainActivityに書きます。

問5:もし初心者でもわかりやすいサイトがあればお願いいたします。
https://www.youtube.com/watch?v=kMI2jy-WlGM
上記のユーチューブシリーズPart1からPart3まで視聴すればなんとなくわかるはずです。英語ですが

<エラーの原因>
ここ数年の仕様変更で「レイアウトでボタンを作る→ボタンをMainActivityで参照する」ことが簡単にできなくなったみたいです。私が使っていたときはできたのですが、、、
なので、恐らく添付ユーチューブ動画シリーズのPart3にあるようにGradleScripts>>build.gradle(Module...)を編集>>buildFeatures...を追加
を行い、MainActivityでは

  • ActivityMainBindingの行を追加
  • Inflateの行を追加
  • setContentViewを編集(これがスタート画面を定義しています)
  • 最後にボタン動作を定義します↓

binging.button.setOnclickListener{
binding.button.text= "テキスト"
}

//注:buttonは投稿者様が作ったボタンのタグ名に変えてください。
//注:"テキスト"はボタンが押されたときにボタン上のテキストがこのテキストにかわります。

<実機、エミュレータへの接続が上手くいかない原因>
私が使っていたころはエミュレータをうまく起動させるのにBIOSの設定を少しいじった記憶があります。AMDのプロセッサを使っていると、トラブルがあるみたいでした。
そこで、エミュレータの問題を解決するまでは、いちいちAPKファイルを抽出して実機で起動していました;;

0Like

Comments

  1. @daifu9mogumogu

    Questioner

    回答ありがとうございます。
    原因はわかりませんが、実機での動作が再び出来るようになりました。

    動画を確認し、
    GradleScripts>>build.gradle(Module...)を編集>>buildFeatures...を追加
    してみたところ、もうこの時点でエラーが発生してしまいました。

    ---

    plugins {
    id 'com.android.application'
    }

    android {
    namespace 'com.example.aButton_test'
    compileSdk 32

    buildFeatures {
    viewBinding true
    }



    defaultConfig {
    applicationId "com.example.aButton_test"
    minSdk 30
    targetSdk 32
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
    }
    compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
    }
    }

    dependencies {

    implementation 'androidx.appcompat:appcompat:1.5.1'
    implementation 'com.google.android.material:material:1.7.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    }

    ---
    [エラー内容]
    Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details.
    A newer version of androidx.test.ext:junit than 1.1.3 is available: 1.1.4
    A newer version of androidx.test.espresso:espresso-core than 3.4.0 is available: 3.5.0

Your answer might help someone💌