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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

440閲覧

クリックしたリストビューAのアイテムとIDが同じものをリストビューBに表示したい

YonHan

総合スコア40

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2022/01/14 02:59

編集2022/01/15 05:12

前提

SQLiteのDBで(ID,title,date,time,todo1)の5列のデータがあるテーブルを作りました。

2つのListview(リストA,リストB)を設置し、{作りたいアプリの都合上それぞれ別のデザイン(アダプター)が必要になるためリストを2つ設置しました。}

リストAには、titleとdateの内容を表示
リストBには、timeとtodo1の内容を表示します。

実現したいこと

クリックしたリストAのアイテムとIDが同じものをリストBに表示したいと考えていて、IDの取得の仕方は分かったのですが、その後の、クリックしたリストAのアイテムとIDが同じものをリストBに表示するやり方がわかりません。

リストAのアイテムをクリックしIDを取得

IDが同じものの内容をリストBに表示

該当のソースコード

Java

1package com.example.adaptertest2; 2import android.app.Activity; 3import android.content.DialogInterface; 4import android.content.Intent; 5import android.database.Cursor; 6import android.database.sqlite.SQLiteDatabase; 7import android.os.Bundle; 8import android.view.View; 9import android.widget.AdapterView; 10import android.widget.ListView; 11 12import androidx.appcompat.app.AlertDialog; 13 14import java.util.ArrayList; 15 16public class Tab_01 extends Activity { 17 18 DBHelper_1 DBHelper1; 19 ArrayList<User> userList; 20 ListView listView,listView1; 21 User user; 22 23 SQLiteDatabase db; 24 25 @Override 26 protected void onCreate( 27 Bundle savedInstanceState) { 28 super.onCreate(savedInstanceState); 29 setContentView(R.layout.activity_tab01); 30 } 31 32 public void onaddButtonClick1(View view) { 33 Intent intent = new Intent(getApplication(), add.class); 34 intent.putExtra("ScreenBefore","Tab_01"); 35 startActivity(intent); 36 } 37 38 //チェックボックス押したときの処理 39 public void deleteTask(View view){ 40 41 } 42 43 @Override 44 //他のアクティビティから戻る際にListViewを更新したいためonResumeに記述 45 protected void onResume() { 46 super.onResume(); 47 48 DBHelper1 = new DBHelper_1(this); 49 userList = new ArrayList<>(); 50 Cursor data = DBHelper1.getListContents(); 51 //int numRows = data.getCount(); 52 53 //TODO todoテスト変更2 54 int i=0; 55 while(data.moveToNext()){ 56 user = new User(data.getLong(0),data.getString(1),data.getString(2),data.getString(3),data.getString(4)); 57 userList.add(i,user); 58 System.out.println(data.getString(3)+" "+data.getString(4)); 59 System.out.println(data.getString(1)+" "+data.getString(2)); 60 System.out.println(userList.get(i).getTitleName()); 61 i++; 62 } 63 TwoColumnAdapter adapter = new TwoColumnAdapter(this,R.layout.lv_adapter, userList); 64 ToDoAdapter todoadapter = new ToDoAdapter(this,R.layout.todo_adapter, userList); 65 listView = (ListView) findViewById(R.id.lv1); 66 listView1 = (ListView) findViewById(R.id.lv1_1); 67 listView.setAdapter(adapter); 68 listView1.setAdapter(todoadapter); 69 listView.setOnItemClickListener(new OnItemClickListener()); 70 listView.setOnItemLongClickListener(new OnItemLongClickListener()); 71 72 } 73 //TODO 予定リスト押したら、ToDoリストに予定に対するToDo入る 74 //タブ1のリストを押した場合 75// ToDoAdapter todoadapter = new ToDoAdapter(this,R.layout.todo_adapter, userList); 76 public class OnItemClickListener implements AdapterView.OnItemClickListener { 77 public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { 78 79 ArrayList data1 = new ArrayList<>(); 80 81 Cursor data = DBHelper1.getListContents(); 82 //int numRows = data.getCount(); 83 84 //★IDの取得★ 85 User user = userList.get(userList.size() - 1 - position); 86 long UserId = user.getId(); 87 88 //TODO todoテスト変更2 89 if(UserId == 1) {//アダプターBのIDとクリックしたアイテムのIDが同じだったら... 90 91 int i = 0; 92 while (data.moveToNext()) { 93 user = new User(data.getLong(0), data.getString(1), data.getString(2), data.getString(3), data.getString(4)); 94 data1.add(i, user); 95 System.out.println(data.getString(3) + " " + data.getString(4)); 96 System.out.println(userList.get(i).getTitleName()); 97 i++; 98 } 99 ToDoAdapter todoadapter = new ToDoAdapter(this, R.layout.todo_adapter, data1); 100 listView1 = (ListView) findViewById(R.id.lv1_1); 101 listView1.setAdapter(todoadapter); 102 103 } 104 //db.execSQL("SELECT TODO1NAME FROM lv1_data WHERE ID ==" + UserId); 105 106 } 107 } 108 109 //タブ1のリストを長押しした場合 110 private class OnItemLongClickListener implements AdapterView.OnItemLongClickListener { 111 112 public boolean onItemLongClick(AdapterView<?> parent, View view , int position, long id) { 113 //ダイアログ準備 114 AlertDialog.Builder builder = new AlertDialog.Builder(Tab_01.this); 115 builder.setTitle("削除しますか?"); 116 builder.setPositiveButton("はい", new DialogInterface.OnClickListener() { 117 @Override 118 public void onClick(DialogInterface dialog, int which) { 119 120 } 121 }); 122 builder.setNegativeButton("いいえ",null); 123 builder.setCancelable(true); 124 builder.show(); 125 return true; 126 } 127 } 128}

試したこと

上記のソースコード参照
・SQLのSELECT文を使おうとも考えました。ですが、その後どう書けばわからなくなり、一旦保留しました。
・data2というものにリストBに表示するためのアイテムを保存しようと考えました。

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

Gradleバージョン:7.0.2

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

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

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

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

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

jimbe

2022/01/15 03:31

> このクラスのソースコード全文 100行程度であればご質問に全文の載る(ご質問全体で 1万文字書ける)と思いますので、別サイトへのリンクにする必要は無いと思います。 > SQLのSELECT文を使おうとも考えました 何故諦めたのでしょうか。 また、構造が結構混みあっています(言ってしまえば"滅茶苦茶")ので、アダプタやレイアウト・全体構造から見直した方が良いように思います。 その為に、アダプタやレイアウト等動作する一式をご提示頂けると回答が付き易いと考えます。
guest

回答1

0

ベストアンサー

listView のデータを持つ TwoColumnAdapter と listView1 のデータを持つ ToDoAdapter はどちらも userList から作成されていますので、 userList には全てのデータが含まれているものと思われます。
ですから、 userList からデータを選び出せば良いだけで、わざわざ onResume からデータベースを引く処理をコピペする必要はありません。
(どうも全体的にコピペだらけで、ご自身のモノになっておらず、プログラミングとしては良くない傾向と思います。)

データベースにせよ userList にせよ、一連のデータの中から特定の値を持つものを選び出すのに、その一連のデータを見ていくループのに特定の値かを判断する文が出来るはずはありません。
お菓子の入った幾つもの同じ外観の箱からアメ玉が入っている箱を選ぶには、一つずつ箱を開けてアメ玉が入っているかを確認するはずです。どうやって中身を見ずにアメ玉の有無を判断したら良いかを考えても意味がありません。

java

1// id == UserId な User を data1 に集める. 2ArrayList<User> data1 = new ArrayList<>(); 3for(User u : userList) if(u.getId() == UserId) data1.add(u);

投稿2022/01/15 08:04

編集2022/01/15 08:07
jimbe

総合スコア12614

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

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

YonHan

2022/01/19 02:58 編集

仰る通りです。もともとAndroidStudio、Javaの知識が浅く、コピペを繰り返した結果、滅茶苦茶なコードとなってしまいました、jimbeさん以外にも全体構造を見直すべきと何度か指摘を頂いたのですが、結局自分の知識不足のため何もできません。長文での回答ありがとうございます。参考にさせていただきます。 この後Listviewに表示する方法としては、以下のようにアダプターとListViewを指定して設定する形でよろしいですか? ToDoAdapter todoadapter = new ToDoAdapter(getApplicationContext(), R.layout.todo_adapter, data1); listView1 = (ListView) findViewById(R.id.lv1_1); listView1.setAdapter(todoadapter);
jimbe

2022/01/19 04:57 編集

アダプタの設定方法としては合っていると思います。 ついでに言えば、 findViewById はクリックの度に毎回行う必要はないはずです。 listView1 は onResume で既に findViewById しています。 さらには、毎回 onResume で行う必要も無いです。 listView1 は (listView もですが ) 表示するデータは変わってもビュー自体は変わらないはずですので、アプリ起動時に一回だけ onCreate で行うようにしても良いかと思います。
jimbe

2022/01/19 04:58 編集

知識が無いのは私も同じです。ちょっぴり歴が長いに過ぎません。絶対的に全てを知っている人等いないと思います。 コピペで問題なのは、それ**だけ**で出来ると思ってしまうことです。動作してるものから持ってくれば動くだろうということです。ですが、コピペ元がなぜそうなっているのかを理解していなければ "木に竹を繋ぐ" ことになりかねません。 一連のご質問はお作りになっているアプリの一部分に関するものと思われますが、それぞれが一部分の為に回答も一部分のみに対してしか出来ず、それを集めても結局コピペの域を脱していません。 「こういう画面でこう表示されていてこう操作したらこう表示が変わる」というイメージを共有した上で「操作した時にこのコードが動いて表示が変わるはずが、こうなってしまう」という一部分をご質問されているとなれば、そのコードに問題があればイメージに沿った形でそれを指摘されるでしょうし、そもそものイメージの部分に問題・原因がある、難しかったりもっと簡単な方法があったり等であれば、その指摘も期待できるでしょう。 残念ながら teratail の仕様(文字数制限)上本当に全てを載せて頂くことが出来ないことが多々あり、必要最小限に動作するコード群を選び出す、画面イメージは手書きでも画像にする、他のネットストレージをご利用になる等も必要になるかもしれません。 『(…面倒)』と思われるとしても理解できますが、問題を解消して(開発としてもご自身としても)先に進める可能性を得る為としては、それらを行えるようになることも含めて有用ではないでしょうか。
YonHan

2022/01/20 07:55

了解しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問