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

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

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

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

Android Studio

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

Q&A

1回答

1399閲覧

画面遷移の課題、numPickerとEditTextbuttonの対応について

PINE1103

総合スコア20

Java

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

Android Studio

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

0グッド

0クリップ

投稿2020/03/21 02:27

編集2020/03/22 03:42
```java(activity_main) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:text="時間割選択" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" android:onClick="btn2_onClick"/> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:text="写真選択" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:orientation="vertical"> </LinearLayout> <TableLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:shrinkColumns="0,1,2,3,4,5,6"> <TableRow android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="月"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="火"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="水"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="木"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="金"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="土"/> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" /> <Button android:id="@+id/btn46" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="btn46_onClick /> <Button android:id="@+id/btn47" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="btn47_onClick" /> <Button android:id="@+id/btn48" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="btn48_onClick" /> <Button android:id="@+id/btn49" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="btn49_onClick" /> <Button android:id="@+id/btn50" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="btn50_onClick" /> <Button android:id="@+id/btn51" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="btn51_onClick" /> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2"/>.....android:text1と同様に6まで続きます。

java(activity_sub2)

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="vertical"> 7 8 <EditText 9 android:id="@+id/txtName" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" 12 android:inputType="text" 13 android:hint="講義名を入力してください。"> 14 </EditText> 15 <EditText 16 android:id="@+id/txtName2" 17 android:layout_width="match_parent" 18 android:layout_height="wrap_content" 19 android:inputType="text" 20 android:hint="教室を入力してください。"> 21 </EditText> 22 23 24 <TextView 25 android:id="@+id/text_view" 26 android:layout_width="wrap_content" 27 android:layout_height="wrap_content" 28 android:layout_gravity="center" 29 android:layout_margin="30dp" 30 android:textStyle="bold" 31 android:text="@string/時間割" 32 android:textColor="#00f" 33 android:textSize="40sp"/> 34 <LinearLayout 35 android:layout_width="match_parent" 36 android:layout_height="wrap_content" 37 android:gravity="center" 38 android:layout_margin="10dp" 39 android:orientation="horizontal"> 40 <NumberPicker 41 android:id="@+id/numPicker0" 42 android:layout_width="wrap_content" 43 android:layout_height="wrap_content" 44 android:background="#aaf"/>/> 45 </LinearLayout> 46 47 <Button 48 android:id="@+id/button88" 49 android:layout_width="match_parent" 50 android:layout_height="wrap_content" 51 android:layout_margin="40dp" 52 android:text="@string/ok" 53 android:onClick="btn88_onClick"/> 54 55 56 57</LinearLayout>

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

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

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

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

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

jimbe

2020/03/21 03:00 編集

コードには専用の枠が作れます. 入力枠の上辺にある "<code>" を押すと出てくる, ``` で囲まれた "コード" という文字列を置き換える形で入力(コピペ)してください. (マークダウン) ご質問は編集できます. また, 入力枠の下にプレビューがあり, 成功していればコードが枠に囲まれるのも確認できますので, ご活用ください.
jimbe

2020/03/21 03:02

両アクティビティのレイアウトもご提示願えますか.
PINE1103

2020/03/22 03:38

回答ありがとうございます!! 了解です! 送らさせてもらいます!
PINE1103

2020/03/22 03:47

すみません。10000文字が超過したのでここにactivityをのせさせていただきます。 ----MainActivity------ package to.msn.wings.ourapp; import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.accessibility.AccessibilityViewCommand; import android.os.Bundle; import android.content.Intent; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.view.View.OnClickListener; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void btn2_onClick(View view){ Intent intent=new Intent(this,to.msn.wings.ourapp.SubActivity2.class); //アクティビティを起動(サブ画面起動) startActivityForResult(intent,0); } @Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ super.onActivityResult(requestCode, resultCode, data); //リクエストコードと結果コードをチェック if(requestCode==0 && resultCode==RESULT_OK){ //結果のコードを取得&ボタンのテクストに記入 String txtName=data.getStringExtra("txtName"); String numPicker=data.getStringExtra("numPicker"); } } } ----SubActivity2------- package to.msn.wings.ourapp; import android.content.Intent; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.NumberPicker; import android.widget.TextView; public class SubActivity2 extends AppCompatActivity{ private NumberPicker numPicker0; private TextView pickerTextView; private String[] figures=new String[1]; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub2); pickerTextView=findViewById(R.id.text_view); Button pickerButton=findViewById(R.id.button88); //ドラムロールに表示したい値を含んだ配列を作る final String[] pref={"月1","月2","月3","月4","月5","月6","火1", "火2","火3","火4","火5","火6","水1","水2","水3","水4", "水5","水6","木1","木2","木3","木4","木5","木6","金1", "金2","金3","金4","金5","金6","土1","土2","土3","土4","土5","土6"}; //numberPickerをインスタンス化する final NumberPicker picker=findViewById(R.id.numPicker0); //配列のインデックスの最小、最大を指定する picker.setMinValue(0); picker.setMaxValue(35); //numberpickerに配列をセットする picker.setDisplayedValues(pref); pickerButton.setOnClickListener(new OnClickListener() { public void onClick(View v){ figures[0]=String.valueOf(numPicker0.getValue()); String str=String.format("%s", figures[0]); Float fig=Float.parseFloat(str); pickerTextView.setText(String.valueOf(fig)); } }); } //ボタンクリック時に呼び出されるメソッド public void btn88_onClick(View v){ //インテントを生成&データをセット //講義名のインテント Intent i=new Intent(this,to.msn.wings.ourapp.MainActivity.class); EditText txtName=findViewById(R.id.txtName); i.putExtra("txtName",txtName.getText().toString()); //教室のインテント EditText txtName2=findViewById(R.id.txtName2); i.putExtra("txtName2",txtName.getText().toString()); //numberPickerのインテント NumberPicker numPicker0=findViewById(R.id.numPicker0); i.putExtra("numPicker",txtName.getText().toString()); //結果情報をセット setResult(RESULT_OK,i); //現在のアクティビティを終了 finish(); } }
jimbe

2020/03/22 08:08 編集

仕様の確認ですが, SubActivity2 の pickerButton を押した時の処理は, "時間割" のところに数値を出しているようですが, 何を意味するのでしょうか. 必要ですか?
PINE1103

2020/03/23 07:30

やりたいこととしてはpickerButtonで押したときの処理を基に該当の時間割のButtonに名前付けすることです。(例えばNumberpickerで月1が選択され、講義名が「あ」の場合、時間割の月曜日1限のButtonにテキスト「あ」が反映させることができるようになりたいです!)
jimbe

2020/03/23 08:06

いえ, お聞きしているのは pickerButton.setOnClickListener(new OnClickListener() { public void onClick(View v){ figures[0]=String.valueOf(numPicker0.getValue()); String str=String.format("%s", figures[0]); Float fig=Float.parseFloat(str); pickerTextView.setText(String.valueOf(fig)); } }); の部分です. 私の回答のコードでは削除してしまいましたが, もしや必要だったのかと...
jimbe

2020/03/23 08:15

回答に付けたコメントに github へのリンクがありますので, 可能でしたらそちらからコードやレイアウトを取得して試してみてください. 一応回答のコードも修正していますが, レイアウトが面倒なことになっていますので...(_ _;
PINE1103

2020/03/24 03:59

ありがとうございます! 試してみます!!
guest

回答1

0

Main_Activity⇒Sub_Activity2の遷移ができないことです。ボタンをクリックしてもアプリが消えます

「アプリが消え」た時のログを御覧になれば, 以下の例外が表示されているはずです.

java.lang.ArrayIndexOutOfBoundsException: length=36; index=36

原因は

java

1picker.setMinValue(0); 2picker.setMaxValue(36);

の "36" です.
pref 配列の"要素数"は 6x6=36 ですが, MinValue(0) と "0" 始まりですので, MaxValue は "35" でなければなりません.

2つ目は3つ目の一部分のことのようですし, 3つ目はボタンがどうなっているかに因りますので, 全体のレイアウトのご提示が必要です.

また, id="@+id/button88" のボタンに onClick="btn88_onClick" していた場合, 現状のコードではボタンを押しても SubActivity2 から MainActivity には戻りません.
setOnClickListener で別の処理を設定しているため, xml の設定は上書きされ, btn88_onClick は呼ばれません.

setOnClickListener で行っている処理も無駄に意味不明です.
NumberPicker は選択するだけで決定するインターフェースであり, 選択してボタンを押して決定すると言うものではありません.
選択した時に呼ばれるリスナーがありますので, お調べになっては如何でしょうか.

#コードやり直し

MainActivity.java

java

1package to.msn.wings.ourapp; 2 3import androidx.appcompat.app.AppCompatActivity; 4import android.os.Bundle; 5import android.content.Intent; 6import android.view.View; 7import android.widget.Button; 8 9public class MainActivity extends AppCompatActivity { 10 //ドラムロールの表示と同じ順にボタンの id を並べた配列を作る 11 private static final int[] buttons={ 12 R.id.btn月1,R.id.btn月2,R.id.btn月3,R.id.btn月4,R.id.btn月5,R.id.btn月6, 13 R.id.btn火1,R.id.btn火2,R.id.btn火3,R.id.btn火4,R.id.btn火5,R.id.btn火6, 14 R.id.btn水1,R.id.btn水2,R.id.btn水3,R.id.btn水4,R.id.btn水5,R.id.btn水6, 15 R.id.btn木1,R.id.btn木2,R.id.btn木3,R.id.btn木4,R.id.btn木5,R.id.btn木6, 16 R.id.btn金1,R.id.btn金2,R.id.btn金3,R.id.btn金4,R.id.btn金5,R.id.btn金6, 17 R.id.btn土1,R.id.btn土2,R.id.btn土3,R.id.btn土4,R.id.btn土5,R.id.btn土6 18 }; 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.activity_main); 23 } 24 public void btn2_onClick(View view){ 25 Intent intent=new Intent(this, SubActivity2.class); 26 //アクティビティを起動(サブ画面起動) 27 startActivityForResult(intent,0); 28 } 29 @Override 30 protected void onActivityResult(int requestCode,int resultCode,Intent data){ 31 super.onActivityResult(requestCode, resultCode, data); 32 //リクエストコードと結果コードをチェック 33 if(requestCode==0 && resultCode==RESULT_OK){ 34 //結果のコードを取得&ボタンのテクストに記入 35 String txtName=data.getStringExtra("txtName"); 36 int numPicker=data.getIntExtra("numPicker", -1); //0-35 37 Button button=findViewById(buttons[numPicker]); 38 button.setText(txtName); 39 } 40 } 41}

activity_main.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="vertical"> 7 8 <androidx.constraintlayout.widget.ConstraintLayout 9 android:layout_width="match_parent" 10 android:layout_height="wrap_content"> 11 12 <Button 13 android:id="@+id/btn2" 14 android:layout_width="wrap_content" 15 android:layout_height="wrap_content" 16 android:layout_gravity="end" 17 android:layout_marginTop="8dp" 18 android:layout_marginEnd="8dp" 19 android:text="時間割選択" 20 app:layout_constraintEnd_toEndOf="parent" 21 app:layout_constraintTop_toTopOf="parent" 22 android:onClick="btn2_onClick"/> 23 24 <Button 25 android:id="@+id/btn1" 26 android:layout_width="wrap_content" 27 android:layout_height="wrap_content" 28 android:layout_gravity="top" 29 android:layout_marginStart="8dp" 30 android:layout_marginTop="8dp" 31 android:text="写真選択" 32 app:layout_constraintStart_toStartOf="parent" 33 app:layout_constraintTop_toTopOf="parent" /> 34 </androidx.constraintlayout.widget.ConstraintLayout> 35 36 <LinearLayout 37 android:layout_width="match_parent" 38 android:layout_height="50dp" 39 android:orientation="vertical"> 40 </LinearLayout> 41 42 <TableLayout 43 android:layout_width="match_parent" 44 android:layout_height="match_parent" 45 android:orientation="vertical" 46 android:shrinkColumns="0,1,2,3,4,5,6"> 47 48 <TableRow 49 android:layout_width="match_parent" 50 android:layout_height="match_parent"> 51 <Button 52 android:layout_width="wrap_content" 53 android:layout_height="wrap_content"/> 54 <Button 55 android:layout_width="wrap_content" 56 android:layout_height="wrap_content" 57 android:text=""/> 58 <Button 59 android:layout_width="wrap_content" 60 android:layout_height="wrap_content" 61 android:text=""/> 62 <Button 63 android:layout_width="wrap_content" 64 android:layout_height="wrap_content" 65 android:text=""/> 66 <Button 67 android:layout_width="wrap_content" 68 android:layout_height="wrap_content" 69 android:text=""/> 70 <Button 71 android:layout_width="wrap_content" 72 android:layout_height="wrap_content" 73 android:text=""/> 74 <Button 75 android:layout_width="wrap_content" 76 android:layout_height="wrap_content" 77 android:text=""/> 78 </TableRow> 79 80 <TableRow 81 android:layout_width="match_parent" 82 android:layout_height="match_parent"> 83 <Button 84 android:layout_width="wrap_content" 85 android:layout_height="wrap_content" 86 android:text="1" /> 87 <Button 88 android:id="@+id/btn月1" 89 android:layout_width="wrap_content" 90 android:layout_height="wrap_content" /> 91 <Button 92 android:id="@+id/btn火1" 93 android:layout_width="wrap_content" 94 android:layout_height="wrap_content" /> 95 <Button 96 android:id="@+id/btn水1" 97 android:layout_width="wrap_content" 98 android:layout_height="wrap_content" /> 99 <Button 100 android:id="@+id/btn木1" 101 android:layout_width="wrap_content" 102 android:layout_height="wrap_content" /> 103 <Button 104 android:id="@+id/btn金1" 105 android:layout_width="wrap_content" 106 android:layout_height="wrap_content" /> 107 <Button 108 android:id="@+id/btn土1" 109 android:layout_width="wrap_content" 110 android:layout_height="wrap_content" /> 111 </TableRow> 112 113(以下5行, 時間ボタンの text と 曜日ボタンの id を変える他は同様) 114 115 </TableLayout> 116</LinearLayout>

SubActivity2.java

java

1package to.msn.wings.ourapp; 2 3import android.content.Intent; 4import android.os.Bundle; 5import androidx.appcompat.app.AppCompatActivity; 6import android.view.View; 7import android.widget.EditText; 8import android.widget.NumberPicker; 9 10public class SubActivity2 extends AppCompatActivity{ 11 //ドラムロールに表示したい値を含んだ配列を作る 12 private static final String[] pref={ 13 "月1","月2","月3","月4","月5","月6", 14 "火1","火2","火3","火4","火5","火6", 15 "水1","水2","水3","水4","水5","水6", 16 "木1","木2","木3","木4","木5","木6", 17 "金1","金2","金3","金4","金5","金6", 18 "土1","土2","土3","土4","土5","土6" 19 }; 20 @Override 21 protected void onCreate(Bundle savedInstanceState){ 22 super.onCreate(savedInstanceState); 23 setContentView(R.layout.activity_sub2); 24 25 //numberPickerをインスタンス化する 26 final NumberPicker picker=findViewById(R.id.numPicker0); 27 //配列のインデックスの最小、最大を指定する 28 picker.setMinValue(0); 29 picker.setMaxValue(pref.length-1); 30 //numberpickerに配列をセットする 31 picker.setDisplayedValues(pref); 32 } 33 //ボタンクリック時に呼び出されるメソッド 34 public void btn88_onClick(View v){ 35 //インテントを生成&データをセット 36 Intent i=new Intent(); 37 //講義名 38 EditText txtName=findViewById(R.id.txtName); 39 i.putExtra("txtName",txtName.getText().toString()); 40 //教室 41 EditText txtName2=findViewById(R.id.txtName2); 42 i.putExtra("txtName2",txtName2.getText().toString()); 43 //numberPicker 44 NumberPicker numPicker=findViewById(R.id.numPicker0); 45 i.putExtra("numPicker",numPicker.getValue()); //0-35 46 //結果情報をセット 47 setResult(RESULT_OK,i); 48 //現在のアクティビティを終了 49 finish(); 50 } 51}

投稿2020/03/21 05:35

編集2020/03/24 09:38
jimbe

総合スコア13209

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

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

jimbe

2020/03/22 09:23 編集

java コードと xml 定義を追加しましたが, 1万文字を超えるため, 先に xml を追加し, それを修正する形で java を上書きしています. xml はこの回答の編集履歴から見てください. 講義を Lecture クラスで表現し, MainActivity の (TableLayout から変えた) GridLayout の中身はコード( initScheduleGrid メソッド)で生成しています. SubActivity2 は起動時に必要なデータを受け取り, okButton から「時間割」ラベルの変更は意味が分からなかった&MainActivity に戻れないので無くしています. レイアウトの id は機能に合わせて直し, レイアウトの並び方法をテキトウに直しています.
jimbe

2020/03/24 09:35 編集

コードを作り直しました. (GitHub のほうは変えていません.) activity_sub2.xml は変更ありません. ボタンと Picker の対応を分かり易くするため, 各ボタンの id を btn月1~btn土6 とし, 不要な onClick は削除しました. (提示した xml は2限以降省略しています.) SubActibity2 から MainActivity へ戻す picker の値は, 文字列から数値に変更, 0~35 が戻りますので, そのまま buttons のインデックスに使用できます. txtName2 のはずが txtName となっているバグも直してあります.
PINE1103

2020/03/26 07:45

ありがとうございます!! その状態でも遷移できなかったのでMain_activity.javaの int numPicker=data.getIntExtra("numPicker", -1);の-1を0にすることで遷移ができ、文字が反映されるようになりました。しかしどのnumPickerを選択しても月1に入力されます... numPickerとbuttonを対応させたにも関わらずなので原因がわからないです... 何度も申し訳ないです。
PINE1103

2020/03/26 08:38

↑ おそらく選択されたnumPickerの値になっておらず、デフォルトの月1のままになっているのが原因だと思うのですが選択されたnumPickerがintentされるコードが分かりません...
jimbe

2020/03/26 09:20

int numPicker=data.getIntExtra("numPicker", -1); の -1 はデフォルト値で, getIntExtra で "numPicker" が無かった場合に 使われる値です. ですので仰る通り, SubActivity2 から戻す intent で "numPicker" が設定されていないものと思われます. SubActivity2 を回答のコードにされていますでしょうか? 最後のほうに i.putExtra("numPicker",numPicker.getValue()); //0-35 という行があり, ここで intent に "numPicker" を設定しています.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問