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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

2回答

3353閲覧

Android Studioで複数ボタンから画面遷移をしたいです。

mi56

総合スコア14

Java

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

Android

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

Android Studio

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

0グッド

2クリップ

投稿2017/11/06 08:43

###前提・実現したいこと
Android Studioを始めたばかりです。
練習として何時に何の業務をしていたか記録するアプリを作ろうとしています。
その第一段階としてメイン画面に複数ボタンを配置して各ボタンごとに別の画面に遷移させたいです。
以下の画面から例えば会議を押したら下図別の画面に遷移して、
それをボタンごとにデータ入力を押したら、データ入力終了の画面に遷移させたいです。
イメージ説明
イメージ説明

###発生している問題・エラーメッセージ
MainActivityからSubActibityを指定しインテントを作成、値を保持させて
それでボタンを判別しようとしてます。
エラーは吐かれていませんがエミュレータで起動したところ、「○○○ has stopped」と出てアプリが終了してしまいます。

###該当のソースコード
MainActivity.java

java

1import android.content.Intent; 2import android.support.v7.app.AppCompatActivity; 3import android.os.Bundle; 4import android.view.View; 5import android.widget.Button; 6import android.widget.Toast; 7 8 9public class MainActivity extends AppCompatActivity{ 10 11 @Override 12 public void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 16 Button sendkaigi = (Button)findViewById(R.id.kaigi); 17 sendkaigi.setOnClickListener(new View.OnClickListener(){ 18 @Override 19 public void onClick(View v){ 20 //インテントの作成 21 Intent intent = new Intent(getApplication(), SubActivity.class); 22 23 intent.putExtra("name","meeting"); 24 //遷移先の画面起動 25 startActivity(intent); 26 } 27 }); 28 Button send_datainput = (Button)findViewById(R.id.datainput); 29 send_datainput.setOnClickListener(new View.OnClickListener(){ 30 @Override 31 public void onClick(View v){ 32 Intent intent = new Intent(getApplication(), SubActivity.class); 33 34 intent.putExtra("name1","data_input"); 35 36 startActivity(intent); 37 } 38 }); 39 } 40}

SubActivity.java

java

1import android.content.Intent; 2import android.os.Bundle; 3import android.support.v7.app.AppCompatActivity; 4import android.view.View; 5import android.widget.Button; 6 7public class SubActivity extends AppCompatActivity{ 8 9 10 public void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 13 Intent a = getIntent(); 14 String name = a.getStringExtra("name"); 15 String b = "meeting"; 16 String name1 = a.getStringExtra("name1"); 17 String c = "data_input"; 18 19 if (name.equals(b)) { 20 21 setContentView(R.layout.activity_sub); 22 23 Button kaigi_return = (Button) findViewById(R.id.kaigi_return); 24 25 kaigi_return.setOnClickListener(new View.OnClickListener() { 26 @Override 27 public void onClick(View view) { 28 finish(); 29 } 30 31 32 }); 33 34 35 } 36 if (name1.equals(c)){ 37 38 setContentView(R.layout.activity_sub_data); 39 40 Button data_return = (Button)findViewById(R.id.data_return); 41 42 data_return.setOnClickListener(new View.OnClickListener(){ 43 @Override 44 public void onClick(View view){ 45 finish(); 46 } 47 48 }); 49 50 } 51 } 52}

###補足情報(言語/FW/ツール等のバージョンなど)
java、Android Studio

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

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

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

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

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

yag

2017/11/06 09:18

has stoppedがいつ出ているのか明確にお願いします。起動直後?会議等のボタンを押下後?ですか?あと、has stoppedは異常終了ですので、エラーログを見逃している可能性が高いです。再度logcatを確認してみてください。
mi56

2017/11/06 09:42

ボタンを押すとhas stoppedと表示されます。logcatに赤字があればエラーということでしょうか
guest

回答2

0

ベストアンサー

Intent#getStringExtraでセットされていないキーの値を取得しようとすると、nullが返ります。例えばkaigiボタンを押してSubActivityに移行すると、nameには値が入りますが、name1はnullになるでしょう。そのまま

Java

1 if (name1.equals(c)){

が実行されると、NullPointerExceptionが飛びますね。それが原因でしょう。

投稿2017/11/06 10:03

keicha_hrs

総合スコア6768

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

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

mi56

2017/11/06 10:07

原因はわかったのですが、どのように改善すれば良いのでしょうか。 教えていただけると助かります。
keicha_hrs

2017/11/06 10:13

キーをnameとname1の2つに分ける必要があるのでしょうか? kaigiを押したときは intent.putExtra("name","meeting"); datainputを押したときは intent.putExtra("name","data_input"); のようにセットして、SubActivityでは"name"から受け取った値で処理を振り分ければいいのではないかと思いますが。 また、SubActivityで振り分け処理をしなくても、Activityを3つ用意して、MainActivityでは押したボタンによって異なるActivityを呼んでもいいような気もします。
mi56

2017/11/06 10:49

nameに統一したところhas stoppedとは表示されなくなりました。 コードには上2つのボタン(会議、データ入力)のみ実装しているのですが、修正したところ会議ボタンは画面遷移して会議終了を押したら初めの画面に戻れたのですが、データ処理では画面遷移はしたのですがデータ終了を押しても画面が戻らなくなってしまいました。 その原因を教えていただけるとありがたいです。 アクティビティを増やした場合にはできたのですが、2つのアクティビティですっきりとさせたいと考え今回アクティビティを2つに制限しました。
keicha_hrs

2017/11/06 11:38 編集

戻らない原因はこのコードの見た目だとわからないですね。activity_sub_data.xmlに記述されたButtonにdata_returnというIDが間違いなく与えられているのでしょうか。それしか考えられないような。
guest

0

楽な方法ですとレイアウトだけ用意しておいて切り替える方法が単純でわかりやすいです。

java

1 // hogeページへの遷移 2 hogeButton = (Button) findViewById(R.id.hogeButton); 3 hogeButton.setOnClickListener(new View.OnClickListener() { 4 @Override 5 public void onClick(View v) { 6 setContentView(R.layout.activity_hoge); 7 } 8 }); 9 10 // hugaページへの遷移 11 hugaButton = (Button) findViewById(R.id.hugaButton); 12 hugaButton.setOnClickListener(new View.OnClickListener() { 13 @Override 14 public void onClick(View v) { 15 setContentView(R.layout.activity_huge); 16 } 17 }); 18

投稿2017/11/06 09:26

hien

総合スコア69

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

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

mi56

2017/11/07 14:50

上記のコードを参考にしたところ1つ目のボタンしか反応しません。 どのように改善すればよろしいでしょうか。
hien

2017/11/08 02:04

2つとも同じことをしているだけですので1つ目が動くのであれば2つ目も動くはずなのですが... 挙動としてはレイアウトが3つ(Main,hoge,huga)あり、ボタンで切り替えているだけです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問