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

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

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

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

Q&A

解決済

1回答

1465閲覧

エディットテキストのデータ取得とデータの受け渡し

退会済みユーザー

退会済みユーザー

総合スコア0

Android Studio

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

0グッド

0クリップ

投稿2018/12/31 15:28

package com.example.yui.test1;

import android.content.Intent;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Activity2 extends AppCompatActivity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_2); Button sendButton = findViewById(R.id.button4); sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplication(), Activity3.class); startActivity(intent); } }); }

}

とコードを書きました。
これに加えてエディットテキストのデータを取得するコードと
データをインテント後のアクティビティに受け渡したいのですが、ネットなどを色々調べてもどれがどれだかわからなくなりました。
インテント後は

package com.example.yui.test1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class Activity3 extends AppCompatActivity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_3); ArrayList data = new ArrayList<>(); data.add("a"); data.add("b"); data.add("c"); data.add("d"); data.add("e"); data.add("f"); data.add("g"); data.add("h"); data.add("i"); ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); ListView listView = (ListView)findViewById(R.id.listView); listView.setAdapter(adapter); }

}

こうなっています。今のところエラーはありません。
始めたばかりでまだわからないことだらけです。
申し訳ありませんが教えてくださる方いらっしゃいませんでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

引き渡したい情報をIntentにセットするには、putExtra()を使います。

java

1 Button sendButton = findViewById(R.id.button4); 2 sendButton.setOnClickListener(new View.OnClickListener() { 3 @Override 4 public void onClick(View v) { 5 EditText editText = findViewById(R.id.editText); 6 String str = editText.getText().toString(); 7 Intent intent = new Intent(getApplication(), Activity3.class); 8 intent.putExtra("editText", str); 9 startActivity(intent); 10 } 11 }); 12

受け取る方は、受け取りたい型に合わせたメソッドを呼び出します。引数はputExtra()したときの第1引数に指定したキーワードと合致させます。String型ならばgetStringExtra()になります。

java

1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_3); 5 6 Intent intent = getIntent(); 7 String str = intent.getStringExtra("editText"); 8 if (str != null) { 9 // 正しく受け取れたときの処理 10 } 11

受け取るときは、型に合わせたメソッドを呼び出す必要があります。この例はString型ですが、Integer型ならばgetIntExtra()、Boolean型ならばgetBooleanExtra()といった具合に使い分けます。詳しくは公式リファレンスを参照してください。

Intent | Android Developers


EditTextが何個あるのかわかりませんが、9個あるとしたら

java

1 Button sendButton = findViewById(R.id.button4); 2 sendButton.setOnClickListener(new View.OnClickListener() { 3 @Override 4 public void onClick(View v) { 5 String[] array = new String[9]; 6 EditText editText1 = findViewById(R.id.editText1); 7 EditText editText2 = findViewById(R.id.editText2); 8 EditText editText3 = findViewById(R.id.editText3); 9 EditText editText4 = findViewById(R.id.editText4); 10 EditText editText5 = findViewById(R.id.editText5); 11 EditText editText6 = findViewById(R.id.editText6); 12 EditText editText7 = findViewById(R.id.editText7); 13 EditText editText8 = findViewById(R.id.editText8); 14 EditText editText9 = findViewById(R.id.editText9); 15 array[0] = editText1.getText().toString(); 16 array[1] = editText2.getText().toString(); 17 array[2] = editText3.getText().toString(); 18 array[3] = editText4.getText().toString(); 19 array[4] = editText5.getText().toString(); 20 array[5] = editText6.getText().toString(); 21 array[6] = editText7.getText().toString(); 22 array[7] = editText8.getText().toString(); 23 array[8] = editText9.getText().toString(); 24 Intent intent = new Intent(getApplication(), Activity3.class); 25 intent.putExtra("editText", array); 26 startActivity(intent); 27 } 28 }); 29

のようにして9個分取得したものを格納したString[]型の値をIntentにセット、

java

1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_3); 5 6 Intent intent = getIntent(); 7 String[] array = intent.getStringArrayExtra("editText"); 8 if (array != null) { 9 // 正しく受け取れたときの処理 10 ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, array); 11 ListView listView = findViewById(R.id.listView); 12 listView.setAdapter(adapter); 13 } 14

のようにgetStringArrayExtra()で受け取ってArrayAdapterの引数に直接渡すことでできませんか。


ややこしい回答をして却って混乱させてしまったようなので、「1つのEditTextの情報を送る」ことに限定し、受け取る方も最初にご提示いただいたコードに極力合わせる形で書き直しました。package文やimport文は省略していますが、Acitivityのクラスは一切省略していないので、これで完結するはずです。

送り側

java

1public class Activity2 extends AppCompatActivity { 2 3 Button sendButton = findViewById(R.id.button4); 4 sendButton.setOnClickListener(new View.OnClickListener() { 5 @Override 6 public void onClick(View v) { 7 EditText editText1 = findViewById(R.id.editText1); 8 String str = editText1.getText().toString(); 9 Intent intent = new Intent(getApplication(), Activity3.class); 10 intent.putExtra("editText", str); 11 startActivity(intent); 12 } 13 }); 14 } 15}

受け取り側

java

1public class Activity3 extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_3); 7 8 Intent intent = getIntent(); 9 String str = intent.getStringExtra("editText"); 10 // 本当はstrがnullかどうかのエラーチェックを入れるべきですが、 11 // ここでは「必ず受け取れる」と決めつけます 12 ArrayList<String> data = new ArrayList<>(); 13 data.add(str); 14 data.add("b"); 15 data.add("c"); 16 data.add("d"); 17 data.add("e"); 18 data.add("f"); 19 data.add("g"); 20 data.add("h"); 21 data.add("i"); 22 23 ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); 24 25 ListView listView = (ListView)findViewById(R.id.listView); 26 listView.setAdapter(adapter); 27 } 28}

投稿2019/01/01 02:09

編集2019/01/02 14:41
keicha_hrs

総合スコア6766

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

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

退会済みユーザー

退会済みユーザー

2019/01/01 04:28

listViewを押したら何か出るようにしたいのですが、そういったことはlistViewではできないですか?
退会済みユーザー

退会済みユーザー

2019/01/01 04:41

今abcd...みたいに書いてあるのですがそこを押すと、その中に入っている情報を開いたことと同じようにしたいのですが...
keicha_hrs

2019/01/01 05:47 編集

意味がよくわからないのですが、Activity2のEditText(複数ある?)に入力した内容を、Activity3のListViewに表示したいということなのでしょうか?
退会済みユーザー

退会済みユーザー

2019/01/01 06:03

はい
退会済みユーザー

退会済みユーザー

2019/01/01 07:44

この場合 data.add()の括弧内になんて書けばいいんでしょうか?
keicha_hrs

2019/01/01 07:54

ArrayAdapterにArrayListの代わりにString[]を渡しているので、この場合はArrayListは不要になります。
keicha_hrs

2019/01/01 08:01

「ArrayListを使いたい」のであれば、 ArrayList<String> data = new ArrayList<>(); data.add(array[0]); data.add(array[1]); data.add(array[2]); ・ ・ ・ のようにすればいいかと思います。
退会済みユーザー

退会済みユーザー

2019/01/01 08:12

すみません...たくさん質問して ありがとうございます!
退会済みユーザー

退会済みユーザー

2019/01/01 08:21

あと、アプリが停止してしまうのですが...
keicha_hrs

2019/01/01 14:23

それは修正後のコードの内容と、エラー発生時のログの内容がわからないと何とも言えません。とりあえず、修正後にどのようなコードにされたのか追記していただけませんか。
keicha_hrs

2019/01/01 14:32

また、エラーが発生したときにはエラーログを提示していただくと原因の推測をしやすくなります。Android Studioの左下の方にLogCatというボタンがあるはずで、クリックするとログを表示するビューが開きます。これを開いた状態でアプリを実行すると、ログが出力されます。 エラーログの調べ方(資料は古いが、LogCatの調べ方自体は変わっていないはず) https://kokufu.blogspot.com/2012/10/exception-logcat-1.html この辺りを参考にしてエラーログを採取して添付していただけると、原因を推測しやすくなります。
退会済みユーザー

退会済みユーザー

2019/01/02 08:38

01-02 17:37:25.798 1571-1571/com.example.yui.test1 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.yui.test1, PID: 1571 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.yui.test1/com.example.yui.test1.Activity3}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 at com.example.yui.test1.Activity3.onCreate(Activity3.java:29) at android.app.Activity.performCreate(Activity.java:6975) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)  at android.app.ActivityThread.-wrap11(Unknown Source:0)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)  at android.os.Handler.dispatchMessage(Handler.java:105)  at android.os.Looper.loop(Looper.java:164)  at android.app.ActivityThread.main(ActivityThread.java:6541)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)  01-02 17:37:26.043 1571-1614/com.example.yui.test1 I/zygote: Background concurrent copying GC freed 6857(1017KB) AllocSpace objects, 0(0B) LOS objects, 56% free, 1168KB/2MB, paused 3.766ms total 293.942ms です
keicha_hrs

2019/01/02 09:10 編集

ArrayIndexOutOfBoundsExceptionが発生しているので、配列の範囲外アクセスをしているのでしょう。例えばString[]型の変数で[3]までしか持っていないのに[4]にアクセスしたりすると発生します。受け取り側のコードはどのようにしたのでしょうか?
退会済みユーザー

退会済みユーザー

2019/01/02 10:53

package com.example.yui.test1; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.ArrayList; public class Activity3 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_3); Intent intent = getIntent(); String str = intent.getStringExtra("editText"); Object[] array = new Object[0]; if (array != null) { // 正しく受け取れたときの処理 ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, array); ListView listView = findViewById(R.id.listView); listView.setAdapter(adapter); } ArrayList data = new ArrayList<>(); data.add(array[0]); data.add("b"); data.add("c"); data.add("d"); data.add("e"); data.add("f"); data.add("g"); data.add("h"); data.add("i"); ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); ListView listView = (ListView)findViewById(R.id.listView); listView.setAdapter(adapter); } } です
keicha_hrs

2019/01/02 11:06 編集

うーん、落ちて当然のコードだし・・・。困ったな、getStringArrayExtra()とかString[]とかなんて余計な回答をした私が悪いのかな。 送りたいEditTextの情報は1つだけなのでしょうか。
退会済みユーザー

退会済みユーザー

2019/01/05 09:46

二つです
keicha_hrs

2019/01/05 09:56 編集

まずは1つ送って受け取るところまでは動作確認できるのでしょうか。2つ送る方法を書いてもいいのですが、それでまたアプリが落ちたとなると堂々巡りになりますので、「1つ情報を送ることが達成できた」ところまでやってみましょう。
退会済みユーザー

退会済みユーザー

2019/01/07 01:58

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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:id="@+id/editText" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Activity1"> <Button android:id="@+id/button2" android:layout_width="167dp" android:layout_height="87dp" android:text="新規保存" android:textSize="35sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.502" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.582" /> <Button android:id="@+id/button3" android:layout_width="167dp" android:layout_height="87dp" android:layout_marginBottom="62dp" android:text="アルバム" android:textSize="35sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.502" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView" app:layout_constraintVertical_bias="0.853" /> <TextView android:id="@+id/textView" android:layout_width="318dp" android:layout_height="0dp" android:layout_marginBottom="157dp" android:layout_marginEnd="6dp" android:layout_marginTop="91dp" android:text="STRAGE" android:textSize="85sp" app:layout_constraintBottom_toTopOf="@+id/button3" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.55" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="MissingConstraints" /> </android.support.constraint. アクティビティ1のアルバムの地点で停止してしまいます
keicha_hrs

2019/01/07 04:10

Activity1はいままで出てきていないものですよね。当初から状況が後退しているのでしょうか。まず質問の目的を果たすことを考えませんか?質問、回答に出てきていないことを後出しされては、いつまで経っても解決にならずきりがありません。組み合わせた状況で新たに出てきた問題は、質問を別に立てるべきだと思います。また、新たに質問を作るならば、後出しせずに済むように出せるものは最初から全て出しましょう。
退会済みユーザー

退会済みユーザー

2019/01/07 09:09

すみません... 本当に申し訳ないです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問