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

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

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

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

Android Studio

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

Q&A

解決済

1回答

1509閲覧

ボタン実装の書き方を変えると、なぜエラーになるのか。

aruko

総合スコア47

Java

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

Android Studio

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

0グッド

0クリップ

投稿2021/09/28 08:22

ボタンクリックと画面遷移との関係が分からないです。
ボタンをクリックすると画面が代わるという内容ですが、ボタンクリック実装の書き方を変えると、エラーになる原因が分かりません。

以下のコードにすると、エラーはなく、実行時も書いたとおりになります。ですが、その下のコードにすると、コード上でエラーになります。

java

1import android.app.Activity; 2import android.content.Intent; 3import android.os.Bundle; 4import android.util.Log; 5import android.view.View; 6import android.widget.Button; 7import android.widget.TextView; 8 9import androidx.activity.result.ActivityResultLauncher; 10import androidx.activity.result.contract.ActivityResultContracts; 11import androidx.appcompat.app.AppCompatActivity; 12 13public class MainActivity extends AppCompatActivity { 14 private static final String TAG = "MainActivity"; 15 16 private int score = 123; 17 Button bt_rock; 18 Button bt_scissors; 19 Button bt_paper; 20 TextView text_sub; 21 22 private ActivityResultLauncher<Intent> startForResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result->{ 23 switch(result.getResultCode()) { 24 case Activity.RESULT_OK: 25 text_sub.setText("もどったよ"); 26 Log.d(TAG, "ActivityResultLauncher result="+result); 27 break; 28 case ResultActivity.RESULT_OWARU: 29 Log.d(TAG, "ActivityResultLauncher OWARU"); 30 finish(); 31 break; 32 } 33 }); 34 @Override 35 protected void onCreate(Bundle savedInstanceState) { 36 super.onCreate(savedInstanceState); 37 setContentView(R.layout.activity_main); 38 text_sub=findViewById(R.id.text_sub); 39 bt_rock = findViewById(R.id.bt_rock); 40 bt_scissors = findViewById(R.id.bt_scissors); 41 bt_paper = findViewById(R.id.bt_paper); 42 43 bt_rock.setOnClickListener(v -> { 44 //結果画面へ 45 startForResult.launch(new Intent(this, ResultActivity.class) 46 .putExtra(ResultActivity.PARAM_SCORE, score)); 47 }); 48 bt_scissors.setOnClickListener(v -> { 49 text_sub.setText("こんにちは"); 50 }); 51 bt_paper.setOnClickListener(v -> { 52 text_sub.setText("こんばんは"); 53 }); 54 } 55}

次はエラーになるコードです。
ボタンクリックの実装の書き方を変えただけです。

java

1import android.app.Activity; 2import android.content.Intent; 3import android.os.Bundle; 4import android.util.Log; 5import android.view.View; 6import android.widget.Button; 7import android.widget.TextView; 8 9import androidx.activity.result.ActivityResultLauncher; 10import androidx.activity.result.contract.ActivityResultContracts; 11import androidx.appcompat.app.AppCompatActivity; 12 13public class MainActivity extends AppCompatActivity { 14 private static final String TAG = "MainActivity"; 15 16 private int score = 123; 17 Button bt_rock; 18 Button bt_scissors; 19 Button bt_paper; 20 TextView text_sub; 21 22 private ActivityResultLauncher<Intent> startForResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result->{ 23 switch(result.getResultCode()) { 24 case Activity.RESULT_OK: 25 text_sub.setText("もどったよ"); 26 Log.d(TAG, "ActivityResultLauncher result="+result); 27 break; 28 case ResultActivity.RESULT_OWARU: 29 Log.d(TAG, "ActivityResultLauncher OWARU"); 30 finish(); 31 break; 32 } 33 }); 34 35 @Override 36 protected void onCreate(Bundle savedInstanceState) { 37 super.onCreate(savedInstanceState); 38 setContentView(R.layout.activity_main); 39 text_sub=findViewById(R.id.text_sub); 40 bt_rock = findViewById(R.id.bt_rock); 41 bt_scissors = findViewById(R.id.bt_scissors); 42 bt_paper = findViewById(R.id.bt_paper); 43 44 View.OnClickListener event = new View.OnClickListener() { 45 public void onClick(View view) { 46 switch (view.getId()) { 47 case R.id.bt_rock: 48 // 結果画面へ 49 startForResult.launch(new Intent(this, ResultActivity.class) 50 .putExtra(ResultActivity.PARAM_SCORE, score)); 51 break; 52 case R.id.bt_scissors: 53 text_sub.setText("こんにちは"); 54 break; 55 case R.id.bt_paper: 56 text_sub.setText("こんばんは"); 57 break; 58 } 59 } 60 }; 61 bt_rock.setOnClickListener(event); 62 bt_scissors.setOnClickListener(event); 63 bt_paper.setOnClickListener(event); 64 65 } 66}

の、 case R.id.bt_rock:
// 結果画面へ
startForResult.launch(new Intent(this, ResultActivity.class)
.putExtra(ResultActivity.PARAM_SCORE, score));
break;
のところの”this, ResultActivity.class”の部分がエラーになりますが、理由が分かりません。
画面遷移のコードは書いてあるコードでいきたいです。
エラーになる原因を教えてください。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

前者と後者のthisの指すものが違うからだと思います
前者はMainActivity 後者は View.OnClickListener

後者のコードを以下のようにしてみるとどうでしょう
new Intent(MainActivity.this, ResultActivity.class)

投稿2021/09/28 09:39

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

aruko

2021/09/28 10:11

そういうことでしたか。 さっそく変えてみたらできました。 疑問点をクリアすることができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問