ボタンクリックと画面遷移との関係が分からないです。
ボタンをクリックすると画面が代わるという内容ですが、ボタンクリック実装の書き方を変えると、エラーになる原因が分かりません。
以下のコードにすると、エラーはなく、実行時も書いたとおりになります。ですが、その下のコードにすると、コード上でエラーになります。
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”の部分がエラーになりますが、理由が分かりません。
画面遷移のコードは書いてあるコードでいきたいです。
エラーになる原因を教えてください。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/28 10:11