質問編集履歴

3

質問内容をより詳細な物に変更

2020/09/13 13:42

投稿

UTF-8
UTF-8

スコア1

test CHANGED
File without changes
test CHANGED
@@ -6,13 +6,15 @@
6
6
 
7
7
  メモ帳を作っており、ListViewの項目を選択するとそれに対応したメモ編集画面に遷移する簡単なものです。
8
8
 
9
- フィルーを掛けた後リストくアクセ出来れば思っおります。
9
+ メモ画面への遷移、データの管理UUIDによって生成た乱数を使用しており、これをデータベーのuuidいうテーブルに格納します。
10
10
 
11
+ このidによってDBレコードの検索、削除等の処理を行っています。
11
12
 
13
+ positionに非常に依存しており、filter()を掛けた後のpositionの位置では対応できなくなってしまいました。(フィルター後のリスト選択でフィルター前のpositionのデータを参照してしまう)
12
14
 
13
- ### 発生る問題・エラーメッセージ
15
+ 以下のソースコードでpositionに依存参照方法などありますでしょうか?
14
16
 
15
- フィルタリング自体は正常に行われるのです、フィルタリングされたリストを選択すると、フィルタリングされる前に表示されてるリストの項目に飛んでしまいます
17
+ この構造自体がよろしくなような気もてきした
16
18
 
17
19
 
18
20
 
@@ -22,27 +24,95 @@
22
24
 
23
25
  ```java
24
26
 
25
- final SimpleAdapter simpleAdapter = new SimpleAdapter(this
27
+ // リスト項目をクリックしたときの処理
26
28
 
27
- , memoList // メモリストデータを格納しているArrayList
29
+ listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
28
30
 
29
- , android.R.layout.simple_expandable_list_item_2 //使用するレイアウト
30
31
 
31
- , new String[]{"title","time"} // タイトル、現在時刻
32
32
 
33
- , new int[]{android.R.id.text1,android.R.id.text2});
33
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id){
34
34
 
35
- filter = simpleAdapter.getFilter();
35
+ Intent intent = new Intent(ListActivity.this, jp.wings.nikkeibp.simplememo.CreateActivity.class);
36
36
 
37
- // idがmemoListのListView取得
37
+ // クリックされたリストに格納されたデータ参照する処理
38
38
 
39
- ListView listView = findViewById(R.id.memoList);
39
+ String idStr = memoList.get(position).get("id");
40
40
 
41
- // フィルター機能ON
41
+ // 新規作成かどうかを判断するidを引き渡す
42
42
 
43
- listView.setTextFilterEnabled(true);
43
+ // このuuidは遷移先でSELECT検索する際に使用します
44
44
 
45
+ intent.putExtra("uuid",idStr);
46
+
47
+ // Activity遷移
48
+
49
+ startActivity(intent);
50
+
51
+ }
52
+
53
+ });
54
+
55
+ ```
56
+
57
+ ```java
58
+
59
+ // リスト項目を長押しクリックした時の処理
60
+
61
+ listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){
62
+
63
+ public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
64
+
65
+ // クリックされたリストに格納されたデータを参照する処理
66
+
67
+ final String idStr = memoList.get(position).get("uuid");
68
+
69
+ //アラートダイアログ
70
+
71
+ final AlertDialog.Builder builder = new AlertDialog.Builder(ListActivity.this);
72
+
73
+ builder.setTitle("選択してください");
74
+
75
+ builder.setItems(items, new DialogInterface.OnClickListener() {
76
+
77
+ @Override
78
+
79
+ public void onClick(DialogInterface dialog, int which) {
80
+
81
+ //削除する が選択された場合
82
+
83
+ if(which == 0){
84
+
85
+ // 長押しした項目をデータベースから削除
86
+
87
+ SQLiteDatabase db = helper.getWritableDatabase();
88
+
89
+ try { db.execSQL("DELETE FROM MEMO_TABLE WHERE uuid = '"+ idStr +"'"); }
90
+
91
+ finally { db.close(); }
92
+
93
+ // 長押しした項目を画面から削除
94
+
95
+ memoList.remove(position);
96
+
45
- listView.setAdapter(simpleAdapter);
97
+ simpleAdapter.notifyDataSetChanged();
98
+
99
+ } else if (which == 1){
100
+
101
+ } else { }
102
+
103
+ }
104
+
105
+ });
106
+
107
+ builder.show();
108
+
109
+ // trueにすることで通常のクリックイベントを発生させない
110
+
111
+ return true;
112
+
113
+ }
114
+
115
+ });
46
116
 
47
117
  ```
48
118
 
@@ -78,10 +148,6 @@
78
148
 
79
149
 
80
150
 
81
- ### 試したこと
82
-
83
- 調べたところフィルタリングされたリストのpositionを別の配列で管理するところまではわかったのですが、既存のfilterを使用している手前、何処でposition等の項目を管理すればよいか分かりませんでした。
84
-
85
151
 
86
152
 
87
153
  ### 補足情報(FW/ツールのバージョンなど)
@@ -89,3 +155,5 @@
89
155
 
90
156
 
91
157
  フィルターはアダプターに用意されているものをそのまま使っています。
158
+
159
+ memoListはDBから取り出したデータを格納しているArrayListです。

2

タイトルをわかりやすく修正

2020/09/13 13:42

投稿

UTF-8
UTF-8

スコア1

test CHANGED
@@ -1 +1 @@
1
- [android] Filter()後のpositionがおかし
1
+ [android] ListViewのFilter()後のデータ参照につ
test CHANGED
File without changes

1

ソースコード一部修正

2020/09/13 13:02

投稿

UTF-8
UTF-8

スコア1

test CHANGED
File without changes
test CHANGED
@@ -33,6 +33,16 @@
33
33
  , new int[]{android.R.id.text1,android.R.id.text2});
34
34
 
35
35
  filter = simpleAdapter.getFilter();
36
+
37
+ // idがmemoListのListViewを取得
38
+
39
+ ListView listView = findViewById(R.id.memoList);
40
+
41
+ // フィルター機能ON
42
+
43
+ listView.setTextFilterEnabled(true);
44
+
45
+ listView.setAdapter(simpleAdapter);
36
46
 
37
47
  ```
38
48