TransWikia.com

android studioでボタンクリック時に画面遷移させる方法

スタック・オーバーフロー Asked on December 22, 2021

したいこと

ボタンクリック時に別の画面(activity_sub1)に遷移したい。

試したこと

MainActivityの@overrideが二つ発生して被ってるので、一つにまとめるとviewがエラーになる。
参考書を読んだりしたのですが、@overrideの扱い方が今一つ分からないです。

activitymainxml
//このボタンをクリックするとactivity_sub1に遷移
<Button
        android:id="@+id/toSub1Button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="516dp"
        android:text="toSub1Button"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"></Button>
MainActivityjava

import android.os.Bundle;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.widget.Button;
import android.view.View;

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClickButton(android.view.View view) {
    (別のボタンについてのメソッド。中略)
    }

   @Override //上の1overrideと被ってるので削除してまとめると別のボタンのviewがエラーになる
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_sub1);

        Button returnButton = findViewById(R.id.returnButton);

        returnButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view2) {
                MainActivity.this.finish();
            }
        });
    }
}
activitysub1xml

 <Button
        android:id="@+id/returnButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="4dp"
        android:layout_marginLeft="4dp"
        android:layout_marginTop="680dp"
        android:text="returnButton"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"></Button>
SubActivity1java

public class SubActivity1 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub1);

        Button returnButton = findViewById(R.id.returnButton);

        returnButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view2) {
                SubActivity1.this.finish();
            }
        });
    }
}
AndroidManifestxml

  <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".SubActivity1"
            android:label="string/app_name" > 
        </activity> //サブactivity追加
    </application>

#参考にしたサイト
https://qiita.com/QiitaD/items/1495f2f9839fe8706d31

One Answer

こんにちは、はじめまして。

@Overrideアノテーション(注釈)とご入力されたコードで発生しているエラーに関するご質問ですね。

@Overrideはこのメソッドが継承元のクラスから継承され、オーバーライド(上書き)されていることを示します。あくまでこの注釈はコンパイラへの指令として働き、書く必要はありますがコードの実行内容には影響しません。

https://docs.oracle.com/javase/jp/10/docs/api/java/lang/Override.html

ここでは、@Overrideが複数あるのが問題ではなく、同じ名前のonCreate(Bundle) メソッドが複数同一クラス内に存在していることが頂いたソースコードでは問題となっています。それに対する対処法は、片方を消してまとめることですので、対処は正しいかと思います。

コードを拝見した限りですと、MainActivityでエラーが生じているのではないでしょうか。
こちらで直しを入れたものは以下になります。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        //activity_mainのレイアウトをContentViewに設定
        setContentView(R.layout.activity_main);
        //activity_main内のtoSub1Buttonを取得
        Button gosubButton = findViewById(R.id.toSub1Button);
        //ボタンがクリックされた時の処理を追加
        gosubButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view2) {
               //Intentを利用して他のアクティビティに遷移する
               Intent intent = new Intent(MainActivity.this, SubActivity1.class);
               startActivity(intent);
            }
        });
    }
    public void onClickButton(android.view.View view) {
    }
}

修正点は以下のとおりです

  • onCreateをひとつにした。
  • R.layout.activity_mainをコンテントビューとして読み込むようにした
  • activity_mainに含まれているボタンを取得するようにした
  • Intentを使用してstartActivityでSubActivity1クラスに遷移するようにした

個別に命令文やエラーの意味を確認して理解を進めてみてください。稼働するサンプルコードなどと比較して見比べるのもいいと思います。

Answered by Kouki.W on December 22, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP