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

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

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

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

Java

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

Android

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

Android Studio

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

解決済

todoリストでSQLで、アップデートするとリストが全て、同じ項目の繰り返しになります。

edoooooo
edoooooo

総合スコア476

SQLite

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

Java

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

Android

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

Android Studio

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

2回答

0リアクション

0クリップ

196閲覧

投稿2017/04/17 11:58

編集2017/04/19 14:27

AndroidでTodoリストを作ったのですが、
todoリストで一つのListが繰り返し表示されます
新規登録でlistを追加した場合も、編集でリストをupdateした場合も、
Listが一つのList(同じ情報のもの)のみの繰り返しとなります。

この下のコードは、メモをデータベース(SQLite)から取得し、mapに値を入れて、それを、ListViewで表示しているコードです。

//MainActivity

java

public class MainActivity extends AppCompatActivity { // ListView 用アダプタ SimpleAdapter mAdapter = null; // ListView に設定するデーた List<Map<String, String>> mList = null; /////////////////////////////////////////////////////ここに宣言されているmListが原因? //新しく追加ListView ListView list=null; //質問する前につ以下 SQLiteDatabase db=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MemoDBHelper memoDBHelper=new MemoDBHelper(this); db=memoDBHelper.getWritableDatabase(); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ここCREATE_TABLE //db.execSQL(CREATE_TABLE); ListView list = (ListView) findViewById(R.id.listView); mList = new ArrayList<Map<String, String>>(); mAdapter = new SimpleAdapter(this, mList, //独自で定義したlayoutを適応する android.R.layout.simple_list_item_2, new String[]{"title", "content", "data"}, //Map側のkey new int[]{android.R.id.text1, android.R.id.text2, R.id.eTxtData} //layout側のTextViewId 表示させたいMapのkey順に合わせる ); // ListView にアダプターをセット list.setAdapter(mAdapter); ///////////////////////////////////////////////この上でリストを表示してる、データベースにデータがあるから、表示がまちがえ? // ListView のアイテム選択イベント list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { // 編集画面に渡すデータをセットし、表示 Intent intent = new Intent(MainActivity.this, EditActivity.class); // //これは編集だから から文字にする intent.putExtra("INSERT",""); intent.putExtra("TITLE", mList.get(pos).get("title")); intent.putExtra("CONTENT", mList.get(pos).get("content")); intent.putExtra("DATA", mList.get(pos).get("data")); String title1= mList.get(pos).get("title"); String content1=mList.get(pos).get("content"); String data1=mList.get(pos).get("data"); String data2=data1.toString(); String table2=UserContract.Users.TABLE_NAME; //////////////////なぜかCOL_TITLEとかでなくTITLEで取得できる???????????? String sql="SELECT * FROM " +table2 + " WHERE TITLE = " +"'"+title1 +"'" + " AND CONTENT ="+ "'"+content1 +"'"+ " AND DATA =" +"'"+data2 +"'"; //下のnullは条件の?の奴 Cursor c =db.rawQuery(sql,null); if(c.moveToFirst()) { String idd = c.getString(c.getColumnIndex(UserContract.Users._ID)); //表示できてる c.close(); intent.putExtra("ID", idd); //ここで IDにせっとし intentを飛ばしてる } startActivity(intent); } }); // ListView をコンテキストメニューに登録 registerForContextMenu(list); } @Override protected void onResume() { super.onResume(); //open helper //open db memoDBHelperに変更 MemoDBHelper memoDBHelper=new MemoDBHelper(this); SQLiteDatabase db=memoDBHelper.getWritableDatabase(); // ListView 用アダプタのデータをクリア mList.clear(); /////////////////////////////////////////////////////////このclearがいけないのか? String id=null; String title = null; String content = null; String data=null; String table2=UserContract.Users.TABLE_NAME; String sql="SELECT * FROM " +table2 ; //下のnullは条件の?の奴 Cursor c =db.rawQuery(sql,null); Log.v("DB_TEST","Count:"+c.getCount()); Map<String, String> map = new HashMap<String, String>(); while(c.moveToNext()){ //この下のこんな書き方にする必要ある? //だからupdateされ無いんじゃん?わからん title=c.getString(c.getColumnIndex(UserContract.Users.COL_TITLE)); content=c.getString(c.getColumnIndex(UserContract.Users.COL_CONTENT)); data=c.getString(c.getColumnIndex(UserContract.Users.COL_DATA)); //このLog.vはデータベースからselectした情報をc.moveToNext()してる奴だから有効 //つまりデータベースにはしっかり入力できてるってこと Log.v("DB_TESTここはMainActivity"," id: "+id+ "title: "+title+ " content: "+content+ " data: "+data); //////////////////////////このログを見るといろいろ取得できてるなのに表示は同じもの map.put("title", title); map.put("content", content); map.put("data",data); mList.add(map); //////////////////////////リストの表示が悪い?それかこの上のコード map.putのやつ } //ここで、addされたmListをlistViewに表示することをやるためにonCreateのん作業をメソッドで呼ぶ必要? c.close(); db.close(); // ListView のデータ変更を表示に反映 mAdapter.notifyDataSetChanged(); }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

akabee

2017/04/17 13:10

「リストに追加」をするとどのメソッドが動くのですか。バグ探しをしてほしいのであれば、最低限問題の動作をするメソッドとそこから呼び出される全てのメソッドは記載してほしいです。
edoooooo

2017/04/17 13:48

リストに追加は、保存ボタンで行い、ボタンを押すと、onOptionsItemSelected(MenuItem item)が呼ばれます。コードを追加しました。どうぞ宜しくお願い致します。
akabee

2017/04/17 14:11

switch文の終わりが見えないように思いますが・・。これで問題個所としては十分な情報があるということですか。
edoooooo

2017/04/17 14:18

}が一つ不足していました。申し訳ありません。修正しました。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

SQLite

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

Java

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

Android

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

Android Studio

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