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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

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

Android

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

Android Studio

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

Q&A

解決済

1回答

3712閲覧

listviewで取得したデータを遷移先のActivityでも取得したい

Haru_T

総合スコア34

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

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

Android

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

Android Studio

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

0グッド

1クリップ

投稿2016/10/17 06:26

英単語帳アプリを作っています。
その中でListviewを使ってデータベースに入れている単語の一覧を表示させるActivityを用意したいと考えています。
そして、表示されている単語をクリックすると、その単語の詳細データを表示させるActivityに遷移させるようにしたいのです。
自分で調べて遷移させる方法は分かったのですが、タップした単語と画面遷移後のActivityに表示する詳細データの単語とを同じものにするにはどうすればいいのかが分かりません。
単語を示す変数を受け渡しすればいいと思っているのですが、for文でListを作っているため、どこにputExtraを用意すべきかが分かっていません。アドバイスお願いします、、、

java

1public class ListActivity extends AppCompatActivity { 2 /*ListViewでデータベースの単語一覧を表示*/ 3 4 private SQLiteDatabase databaseObject; 5 private DataBaseHelper dbhelper = null; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_list); 11 12 final ListView mListView = (ListView) findViewById(R.id.word_list); 13 14 dbhelper = new DataBaseHelper(this); 15 databaseObject = dbhelper.getReadableDatabase(); 16 17 ArrayList<String> data = new ArrayList<String>(); 18 String query = "SELECT * " + "FROM WordData"; 19 20 Cursor cursor = databaseObject.rawQuery(query, null); 21 cursor.moveToFirst(); 22 for (int i = 0; i < cursor.getCount(); i++) { 23 24 data.add(cursor.getString(0)); 25 cursor.moveToNext(); 26 } 27 28 cursor.close(); 29 databaseObject.close(); 30 31 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); 32 mListView.setAdapter(adapter); 33 34 35 //タップした単語の詳細を表示するActivityに画面遷移 36 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 37 @Override 38 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 39 ListView listView = (ListView)parent; 40 String item = (String)listView.getItemAtPosition(position); 41 42 //ここで値を渡す?? 43 Intent intent = new Intent(getApplicationContext(), WordActivity.class); 44 intent.putExtra("word", item); /*処理は合ってる??*/ 45 startActivity(intent); 46 } 47 }); 48}

java

1public class WordActivity extends AppCompatActivity { 2 /*ListViewのitemをタップして詳細データを表示*/ 3 private DataBaseHelper dbhelper; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_word); 9 10 dbhelper = new DataBaseHelper(this); 11 12 SQLiteDatabase databaseObject = dbhelper.getReadableDatabase(); 13 14 /*ここで値を受け取る??*/ 15 Intent intent = getIntent(); 16 String item = intent.getStringExtra("word"); 17 18 String query = "SELECT * " + "FROM WordData"; 19 Log.d("query", "query = " + query); 20 21 Cursor cursor = databaseObject.rawQuery(query, null); 22 23 String word = cursor.getString(0); 24 String pron1 =cursor.getString(1); 25 String pron2 = cursor.getString(2); 26 String mean1 = cursor.getString(3); 27 String mean2 = cursor.getString(4); 28 String des = cursor.getString(5); 29 String part = cursor.getString(6); 30 31 TextView wordView = (TextView)findViewById(R.id.word_view); 32 wordView.setText(word); 33 34 TextView pronView =(TextView) findViewById(R.id.pron_view); 35 pronView.setText("【" + pron1 + pron2 + "】"); 36 37 TextView partView =(TextView) findViewById(R.id.part_view); 38 partView.setText(part); 39 40 TextView mean1View =(TextView)findViewById(R.id.mean1_view); 41 mean1View.setText("①" + mean1); 42 43 TextView mean2View =(TextView) findViewById(R.id.mean2_view); 44 mean2View.setText("②" + mean2); 45 46 TextView desView = (TextView) findViewById(R.id.des_view); 47 desView.setText("※" + des); 48 49 } 50}

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

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

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

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

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

guest

回答1

0

ベストアンサー

Intentを発行する直前(startActivity)がいいですね。
コードの箇所で問題ありません。

とは言っても単語を渡していますが、同じ単語を複数登録する可能性があるなら少しテーブル設計を見直したほうがいいかもしれないですね。

投稿2016/10/17 06:34

編集2016/10/17 06:37
yona

総合スコア18155

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

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

Haru_T

2016/10/17 06:39

Intent intent = new Intent(getApplicationContext(), WordActivity.class); String item = (String)listView.getItemAtPosition(position); intent.putExtra("word", item); startActivity(intent); こういうことでしょうか?それとも下の2行が逆ですか?
yona

2016/10/17 06:45 編集

いえ、そのコードであっています。 ただIntentのコンストラクタの第一引数はActivityを渡したほうがいいので、ListActivity.thisに修正した方がいいです。 エラーが出ますか?
Haru_T

2016/10/17 07:00

Intent intent = new Intent(ListActivity.this, WordActivity.class); String item = (String)listView.getItemAtPosition(position); intent.putExtra("word", item); startActivity(intent); このように訂正しました! 受け取り側に問題があるようでエラーとなってしまいます、、
yona

2016/10/17 07:04

エラーじゃわからないです。 エラーログを載せましょう。
Haru_T

2016/10/17 07:09

エラーは以下の通りです。 お返事が遅くなりましたが同じ単語を登録することはありません。 受け取ったitemをwordと結び付けたいのですが、、、 E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.wordcard2/com.example.wordcard2.WordActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 69 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) at android.app.ActivityThread.access$600(ActivityThread.java:130) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 69 at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418) at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) at com.example.wordcard2.WordActivity.onCreate(WordActivity.java:35) at android.app.Activity.performCreate(Activity.java:5008) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)  at android.app.ActivityThread.access$600(ActivityThread.java:130)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)  at android.os.Handler.dispatchMessage(Handler.java:99)  at android.os.Looper.loop(Looper.java:137)  at android.app.ActivityThread.main(ActivityThread.java:4745)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:511)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)  at dalvik.system.NativeStart.main(Native Method) 
Haru_T

2016/10/17 07:11

エラーログのWordActivity.java:35 のところで引っかかっているようです。String word = cursor.getString(0)のところです。
yona

2016/10/17 07:14

Cursorの作法をもう一度調べた方がいいですね。 リストを表示する時にCursor#moveToFirst等は使いませんでしたか? また、DAOやDTOを作成することをオススメします。
Haru_T

2016/10/17 07:35

難しいです。勉強します、、、 ありがとうございます。 たしかに端末にファイルを作った方がよさそうです。
yona

2016/10/17 07:43

難しいですが、一度ListViewのデータを作成しているところで同じ処理をしているのでそれを参考にしたらいいですよ。 また、端末にファイルを作るとはDAOとDTOに対してのコメントなら 誤解がありそうです。 データ処理を行うクラスを新規で作成した方がいいですよって意味なので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問