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

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

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

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

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1545閲覧

画面遷移を行い、遷移した第2画面のボタンタップイベントを「第1画面のTextViewの空文字に文字列を代入して表示し、第1画面にもどる」にしたい

qishihuang

総合スコア2

Android

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

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

1クリップ

投稿2020/10/04 12:25

前提・実現したいこと

遷移した第2画面のボタンタップイベントを「第1画面のTextViewの空文字に文字列を代入して表示し、第1画面にもどる」にしたいです。

発生している問題・エラーメッセージ

コードを記述して実行したところ、エラーはなかったです。しかし、第2画面のボタンをタップすると、画面が一度黒色になり、第1画面に戻ります。この時第1画面のTextViewは何も表示されませんでした。

該当のソースコード

kotlin

11画面のアクティビティファイル 2package com.example.a 3 4import android.content.Intent 5import androidx.appcompat.app.AppCompatActivity 6import android.os.Bundle 7import android.view.View 8import android.widget.Button 9import android.widget.TextView 10 11class MainActivity : AppCompatActivity() { 12 13 override fun onCreate(savedInstanceState: Bundle?) { 14 super.onCreate(savedInstanceState) 15 setContentView(R.layout.activity_main) 16 17 //第1画面のボタンを取得し、リスナー登録 18 val button1 = findViewById<Button>(R.id.button1) 19 button1.setOnClickListener(Button1Listener()) 20 } 21 22 private inner class Button1Listener() : View.OnClickListener { 23 override fun onClick(v: View?) { 24 val intent = Intent(applicationContext, MainActivity2::class.java) 25 startActivity(intent) 26 } 27 } 28}

kotlin

12画面のアクティビティファイル 2 3package com.example.a 4 5import androidx.appcompat.app.AppCompatActivity 6import android.os.Bundle 7import android.view.View 8import android.widget.Button 9import android.widget.TextView 10 11class MainActivity2 : AppCompatActivity() { 12 13 override fun onCreate(savedInstanceState: Bundle?) { 14 super.onCreate(savedInstanceState) 15 setContentView(R.layout.activity_main2) 16 17 //第2画面のボタンを取得し、リスナー登録 18 val button2 = findViewById<Button>(R.id.button2) 19 button2.setOnClickListener(button2Listener()) 20 } 21 22 private inner class button2Listener() : View.OnClickListener { 23 override fun onClick(v: View?) { 24 //第一画面のTextView取得 25 val get_button1 = findViewById<TextView>(R.id.textview1) 26 //第一画面のTextViewに値を代入(これが問題だと思います、この一行を消すとボタンを押してもアプリは落ちません) 27 get_button1.setText("20") 28 finish() 29 } 30 } 31}

試したこと

・get_button1.setText("20")の1行を削除したところ、画面が黒くなることはありません。 しかし、これだと実現したい機能が搭載されません
・finish()を消しても上記の発生している問題と同様の結果になりました
・まだ試してないのですが、第2画面から第1画面に遷移させ、第1画面にデータを送り、第一画面のTextViewに代入できないかと考えましたが、実現可能でしょうか?

補足情報(FW/ツールのバージョンなど)

Android Studio 3.5.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

あるActivityから別のActivityに遷移し、何かしらの情報を持って元のActivityに戻りたいときは、Activity遷移にstartActivityForResult()を用い、遷移先ではsetResult()で元のActivityに戻したい情報をセットし、遷移元のActiivtyではonActivityResult()でそれを受け取るという実装方法があります。

具体的には次のような感じになるでしょう。

  • MainActivity.kt

kotlin

1class MainActivity : AppCompatActivity() { 2 3 companion object { 4 const val REQUEST_CODE = 1 // どのActivityから戻ってきたか識別するためのコード 5 } 6 7 override fun onCreate(savedInstanceState: Bundle?) { 8 super.onCreate(savedInstanceState) 9 setContentView(R.layout.activity_main) 10 11 //第1画面のボタンを取得し、リスナー登録 12 val button1 = findViewById<Button>(R.id.button1) 13 button1.setOnClickListener(Button1Listener()) 14 } 15 16 private inner class Button1Listener() : View.OnClickListener { 17 override fun onClick(v: View?) { 18 val intent = Intent(applicationContext, MainActivity2::class.java) 19 startActivityForResult(intent, REQUEST_CODE) 20 } 21 } 22 23 // finish()によって戻ってきたときにこのメソッドが呼ばれる 24 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 25 super.onActivityResult(requestCode, resultCode, data) 26 27 if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { 28 if (data != null) { 29 val str = data.getStringExtra("String") // 情報を受け取る 30 if (str != null) { 31 val textView = findViewById<TextView>(R.id.textView1) 32 textView.text = str 33 } 34 } 35 } 36 } 37}
  • MainActivity2.kt

kotlin

1class MainActivity2 : AppCompatActivity() { 2 3 override fun onCreate(savedInstanceState: Bundle?) { 4 super.onCreate(savedInstanceState) 5 setContentView(R.layout.activity_main2) 6 7 //第2画面のボタンを取得し、リスナー登録 8 val button2 = findViewById<Button>(R.id.button2) 9 button2.setOnClickListener(button2Listener()) 10 } 11 12 private inner class button2Listener() : View.OnClickListener { 13 override fun onClick(v: View?) { 14 val intent = Intent() 15 intent.putExtra("String", "20") // 送りたい情報 16 setResult(RESULT_OK, intent) 17 finish() 18 } 19 } 20}

MainActivity2のputExtra()によってセットした情報を、MainActivityのgetStringExtra()で受け取ることができます。第1引数はputとgetの対応を紐付けるためのキーワードなので、一致しさえすれば文字列の内容は何でも良いです。

投稿2020/10/04 15:29

keicha_hrs

総合スコア6768

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

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

qishihuang

2020/10/06 07:38

とても丁寧でわかりやすい解説でした。やりたいことが実現できると思います。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問