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

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

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

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

Android Studio

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

Kotlin

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

解決済

Androidアプリ開発でFragmentからActivityを呼ぶときにエミュレーターでシャットダウンが起きるエラーを解決する方法について

harunouta
harunouta

総合スコア148

Android

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

Android Studio

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

Kotlin

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

1回答

0リアクション

0クリップ

3322閲覧

投稿2020/03/11 11:55

編集2020/03/12 05:01

前提・実現したいこと

Androidアプリ開発で、FragmentからActivityを実行しようとしています。
開発言語はKotlinです。

具体的には、Fragment間とFragment-Activity間の画面遷移を両立したアプリ作成したいです。

ファイル構成は以下のようになっており、

  • Fragment間の画面遷移は、「FragmentOne, FragmentTwo」
  • Fragment-Activity間の遷移は、「FragmentTwo, FormActivityOne」

 で行われます。

files

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

FragmentTwoからFormActivityOneを呼び出すときに、ビルドでは問題が起こらないのですが、エミュレータで起動して、FragmentTwoのボタンを押すと、FormActivityOneに移動せずにクラッシュします。

強制的にアプリが落ちて、エミュレータ上では何も出ないのですが、Android StudioのLogcatでは以下のエラーメッセージが表示されていました。

プログラム上の文法などのエラーではなく、エラー内容の理解と解決策がわからず、困っている状態です。

2020-03-11 20:47:33.241 3016-3016/com.example.transition W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@1c9a799 2020-03-11 20:47:33.280 3016-3016/com.example.transition D/AndroidRuntime: Shutting down VM --------- beginning of crash 2020-03-11 20:47:33.282 3016-3016/com.example.transition E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.transition, PID: 3016 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.transition/com.example.transition.FormActivityOne}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at com.example.transition.FormActivityOne.onCreate(FormActivityOne.kt:29) at android.app.Activity.performCreate(Activity.java:7136) at android.app.Activity.performCreate(Activity.java:7127) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:193)  at android.app.ActivityThread.main(ActivityThread.java:6669)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)  2020-03-11 20:47:33.301 3016-3016/com.example.transition I/Process: Sending signal. PID: 3016 SIG: 9

該当のソースコード

MainActivity.kt

kotlin

import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.fragment.app.Fragment import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // make the list of fragment val fragmentList = arrayListOf<Fragment>( FragmentOne(), FragmentTwo() ) // create instance of adapter val adapter = SamplePagerAdapter(supportFragmentManager, fragmentList) /// set adapter viewPager.adapter = adapter } }

FragmentTwo.kt

Kotlin

import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import kotlinx.android.synthetic.main.fragment_two.* class FragmentTwo : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { return inflater.inflate(R.layout.fragment_two, container, false) } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) btnClick.setOnClickListener(object:View.OnClickListener{ // ここでActivityを呼ぶ override fun onClick(v: View?) { activity?.startActivity(Intent(context, FormActivityOne::class.java)) } }) } }

FormActivityOne.kt

kotlin

import android.app.DatePickerDialog import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.* import android.widget.RadioGroup import java.util.* class FormActivityOne : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) /** * 生年月日取得のCalendar */ val bntDate = findViewById<Button>(R.id.btnDate) val editBirth = findViewById<EditText>(R.id.editBirth) val calendar= Calendar.getInstance() val year = calendar.get(Calendar.YEAR) val month = calendar.get(Calendar.MONTH) val day = calendar.get(Calendar.DAY_OF_MONTH) bntDate.setOnClickListener{ val datePickerDialog = DatePickerDialog(this@FormActivityOne, DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth -> editBirth.setText("" + year + "-" + (monthOfYear+1) + "-" + dayOfMonth) }, year, month, day) datePickerDialog.show() } /** * 新規登録ボタンを押して次のページへ繊維 */ val btClick = findViewById<Button>(R.id.bt_add) val listener = ClickListener() btClick.setOnClickListener(listener) } private inner class ClickListener : View.OnClickListener { override fun onClick(v: View?) { val editNickname = findViewById<EditText>(R.id.editNickname) val editBirth = findViewById<EditText>(R.id.editBirth) /** * ジェンダーラジオボタン */ val rg_gender: RadioGroup val rb_men: RadioButton val rb_women: RadioButton val rb_other: RadioButton var index = "" rg_gender = findViewById(R.id.radioGroup) rb_men = findViewById(R.id.rb_men) rb_women = findViewById(R.id.rb_women) rb_other = findViewById(R.id.rb_other) if(rg_gender.checkedRadioButtonId != -1) { if (rb_men.isChecked) index = "Men" else if (rb_women.isChecked) index = "Women" else if (rb_other.isChecked) index = "Other" } /** * 次のページに値を渡します */ val intent = Intent(applicationContext, FormActivityTwo::class.java) intent.putExtra("nickname", editNickname.text.toString()) intent.putExtra("birth", editBirth.text.toString()) intent.putExtra("gender", index.toString()) startActivity(intent) } } }

試したこと

AndroidManifest.xmlには、MainActivity以外の新たに作成したFormActivityOne、Twoも加えていますが、現在のエラーは解決していません。

xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.transition"> <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=".FormActivityOne" android:label="@string/app_name" > </activity> <activity android:name=".FormActivityTwo" android:label="@string/app_name" > </activity> </application> </manifest>

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

Android Studio 3.5.3

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

m.ts10806

2020/03/11 12:52

回答依頼いただきましたがあいにくAndroid特化のものですとほとんど未経験なもので、ご期待には沿えません(Javaだけならまだ良いのですけど) 回答依頼出す際は質問のメインとなるタグのスコアなどもご確認ください。
jimbe

2020/03/11 19:45

> 開発言語はKotlinです でしたら java のタグは外して頂けますか.

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Android

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

Android Studio

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

Kotlin

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