AndroidでTodoリストを作ったのですが、
todoリストで一つのListが繰り返し表示されます
新規登録でlistを追加した場合も、編集でリストをupdateした場合も、
Listが一つのList(同じ情報のもの)のみの繰り返しとなります。
この下のコードは、メモをデータベース(SQLite)から取得し、mapに値を入れて、それを、ListViewで表示しているコードです。
//MainActivity
java
1public class MainActivity extends AppCompatActivity { 2 // ListView 用アダプタ 3 SimpleAdapter mAdapter = null; 4 5 6 // ListView に設定するデーた 7 List<Map<String, String>> mList = null; 8 /////////////////////////////////////////////////////ここに宣言されているmListが原因? 9 10 //新しく追加ListView 11 ListView list=null; 12 13 //質問する前につ以下 14 SQLiteDatabase db=null; 15 16 17 18 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.activity_main); 23 24 25 MemoDBHelper memoDBHelper=new MemoDBHelper(this); 26 db=memoDBHelper.getWritableDatabase(); 27 28 29////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ここCREATE_TABLE 30 //db.execSQL(CREATE_TABLE); 31 32 33 34 ListView list = (ListView) findViewById(R.id.listView); 35 mList = new ArrayList<Map<String, String>>(); 36 37 38 mAdapter = new SimpleAdapter(this, 39 mList, 40 //独自で定義したlayoutを適応する 41 android.R.layout.simple_list_item_2, 42 new String[]{"title", "content", "data"}, //Map側のkey 43 new int[]{android.R.id.text1, android.R.id.text2, R.id.eTxtData} //layout側のTextViewId 表示させたいMapのkey順に合わせる 44 ); 45 46 // ListView にアダプターをセット 47 list.setAdapter(mAdapter); 48 49 50 ///////////////////////////////////////////////この上でリストを表示してる、データベースにデータがあるから、表示がまちがえ? 51 52 53 // ListView のアイテム選択イベント 54 list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 55 56 @Override 57 public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { 58 59 60 // 編集画面に渡すデータをセットし、表示 61 Intent intent = new Intent(MainActivity.this, EditActivity.class); 62 63 // //これは編集だから から文字にする 64 intent.putExtra("INSERT",""); 65 66 intent.putExtra("TITLE", mList.get(pos).get("title")); 67 intent.putExtra("CONTENT", mList.get(pos).get("content")); 68 intent.putExtra("DATA", mList.get(pos).get("data")); 69 70 71 String title1= mList.get(pos).get("title"); 72 String content1=mList.get(pos).get("content"); 73 String data1=mList.get(pos).get("data"); 74 String data2=data1.toString(); 75 76 String table2=UserContract.Users.TABLE_NAME; 77 //////////////////なぜかCOL_TITLEとかでなくTITLEで取得できる???????????? 78 79 String sql="SELECT * FROM " +table2 + 80 " WHERE TITLE = " +"'"+title1 +"'" + 81 " AND CONTENT ="+ "'"+content1 +"'"+ 82 " AND DATA =" +"'"+data2 +"'"; 83 84 //下のnullは条件の?の奴 85 Cursor c =db.rawQuery(sql,null); 86 87 88 if(c.moveToFirst()) { 89 String idd = c.getString(c.getColumnIndex(UserContract.Users._ID)); 90 91 //表示できてる 92 93 c.close(); 94 intent.putExtra("ID", idd); 95 //ここで IDにせっとし intentを飛ばしてる 96 } 97 98 startActivity(intent); 99 } 100 }); 101 102 // ListView をコンテキストメニューに登録 103 registerForContextMenu(list); 104 } 105 106 107 108 109 110 @Override 111 protected void onResume() { 112 super.onResume(); 113 114 //open helper 115 //open db memoDBHelperに変更 116 MemoDBHelper memoDBHelper=new MemoDBHelper(this); 117 SQLiteDatabase db=memoDBHelper.getWritableDatabase(); 118 119 120 // ListView 用アダプタのデータをクリア 121 mList.clear(); 122 /////////////////////////////////////////////////////////このclearがいけないのか? 123 124 125 String id=null; 126 String title = null; 127 String content = null; 128 String data=null; 129 130 131 String table2=UserContract.Users.TABLE_NAME; 132 String sql="SELECT * FROM " +table2 ; 133 134 135 136 137 //下のnullは条件の?の奴 138 Cursor c =db.rawQuery(sql,null); 139 140 Log.v("DB_TEST","Count:"+c.getCount()); 141 142 Map<String, String> map = new HashMap<String, String>(); 143 while(c.moveToNext()){ 144 145 //この下のこんな書き方にする必要ある? 146 //だからupdateされ無いんじゃん?わからん 147 title=c.getString(c.getColumnIndex(UserContract.Users.COL_TITLE)); 148 content=c.getString(c.getColumnIndex(UserContract.Users.COL_CONTENT)); 149 data=c.getString(c.getColumnIndex(UserContract.Users.COL_DATA)); 150 151 152 //このLog.vはデータベースからselectした情報をc.moveToNext()してる奴だから有効 153 //つまりデータベースにはしっかり入力できてるってこと 154 Log.v("DB_TESTここはMainActivity"," id: "+id+ "title: "+title+ " content: "+content+ " data: "+data); 155 //////////////////////////このログを見るといろいろ取得できてるなのに表示は同じもの 156 157 map.put("title", title); 158 map.put("content", content); 159 map.put("data",data); 160 mList.add(map); 161 162 //////////////////////////リストの表示が悪い?それかこの上のコード map.putのやつ 163 164 } 165 166 //ここで、addされたmListをlistViewに表示することをやるためにonCreateのん作業をメソッドで呼ぶ必要? 167 168 c.close(); 169 db.close(); 170 171 // ListView のデータ変更を表示に反映 172 mAdapter.notifyDataSetChanged(); 173 } 174 175 176
回答2件
あなたの回答
tips
プレビュー