2011-01-23 12 views
2

ユーザーがボタンをクリックしてダイアログを開き、ユーザーがアイテムの名前を入力し、[OK]をクリックしてアイテムがListViewに追加されるようにしたいとします。これまでは、アイテムがListViewに追加されるところまできたが、データを保存する方法はありません。 SQLiteDatabaseを作成するDataHelperというヘルパーがありますが、データベースに保存する方法を理解できません。 私は経験豊富な人ではないので、コード例が必要になります。ListViewアイテムをロードしてSQLiteDatabaseに保存するにはどうすればよいですか?

は、ここに私の.javaです:

package com.shoppinglist; 

import java.util.ArrayList; 

import android.app.Dialog; 
import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 

public class ShoppingList extends ListActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ListView lv = (ListView) findViewById(android.R.id.list); 
     final ArrayList<String> items = new ArrayList<String>(); 
     final ArrayAdapter<String> adapter; 
     adapter = new ArrayAdapter<String>(
     this, android.R.layout.simple_list_item_1, items); 
     lv.setAdapter(adapter); 

     Button button1main = (Button) findViewById(R.id.add); 
     button1main.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      final Dialog additem = new Dialog(ShoppingList.this); 
      additem.setContentView(R.layout.maindialog); 
      final EditText et = (EditText)additem.findViewById(R.id.edittext); 
      additem.setTitle("Type your item"); 
      additem.setCancelable(true); 
      et.setHint("Type the name of an item..."); 

      Button button = (Button) additem.findViewById(R.id.cancel); 
      button.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        additem.dismiss(); 
       } 
      }); 
      additem.show(); 

      Button ok = (Button) additem.findViewById(R.id.ok); 
      ok.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        items.add(et.getText().toString()); 
        adapter.notifyDataSetChanged(); 
        additem.dismiss(); 
        et.setText(""); 
       } 
      }); 
     } 
     }); 
    } 
} 

マイDataHelperクラス:

package com.shoppinglist; 

import java.util.ArrayList; 
import java.util.List; 

import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteStatement; 
import android.util.Log; 

public class DataHelper { 

    private static final String DATABASE_NAME = "items.db"; 
    private static final int DATABASE_VERSION = 1; 
    private static final String TABLE_NAME = "table1"; 

    private Context context; 
    private SQLiteDatabase db; 

    private SQLiteStatement insertStmt; 
    private static final String INSERT = "insert into " 
     + TABLE_NAME + "(name) values (?)"; 

    public DataHelper(Context context) { 
     this.context = context; 
     OpenHelper openHelper = new OpenHelper(this.context); 
     this.db = openHelper.getWritableDatabase(); 
     this.insertStmt = this.db.compileStatement(INSERT); 
     } 

     public long insert(String name) { 
      this.insertStmt.bindString(1, name); 
      return this.insertStmt.executeInsert(); 
     } 

     public void deleteAll() { 
      this.db.delete(TABLE_NAME, null, null); 
     } 

     public List<String> selectAll() { 
      List<String> list = new ArrayList<String>(); 
      Cursor cursor = this.db.query(TABLE_NAME, new String[] { "name" }, 
        null, null, null, null, "name desc"); 
      if (cursor.moveToFirst()) { 
       do { 
        list.add(cursor.getString(0)); 
       } while (cursor.moveToNext()); 
      } 
      if (cursor !=null && !cursor.isClosed()) { 
       cursor.close(); 
      } 
      return list; 
     } 

     private static class OpenHelper extends SQLiteOpenHelper { 

      OpenHelper(Context context) { 
       super(context, DATABASE_NAME, null, DATABASE_VERSION); 
      } 

      @Override 
       public void onCreate(SQLiteDatabase db) { 
       db.execSQL("CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY, name TEXT)"); 
       } 

      @Override 
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
       Log.w("Example", "Upgrading database, this will drop tables and recreate."); 
       db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
       onCreate(db); 
      } 
     } 
} 

マイmain.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FF9900" 
    android:padding="10dp" 
    android:orientation="vertical"> 
     <Button 
      android:id="@+id/add" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Add item..." 
      android:layout_gravity="center"/> 
     <ListView android:id="@android:id/list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="#FFCC00"/> 
</LinearLayout> 

そして、私のmaindialog.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/layout_root" 
    android:orientation="vertical" 
    android:background="#FFFFFF" 
    android:minHeight="100dp" 
    android:minWidth="300dp"> 
    <EditText 
    android:id="@+id/edittext" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 
<LinearLayout 
    android:id="@+id/button_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:layout_gravity="bottom"> 
    <Button 
    android:id="@+id/ok" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Ok"/> 
    <Button 
    android:id="@+id/cancel" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Cancel"/> 
    </LinearLayout> 
</LinearLayout> 

ありがとうございます!

答えて

4

SQLiteDatabaseにListViewアイテムをロードして保存するにはどうすればよいですか?

これは間違った質問です、IMHO。適切な質問は次のとおりです。

私のSQLiteDatabaseの内容を反映するようにListViewを取得するにはどうすればよいですか?

最初のステップは、むしろArrayListArrayAdapterより、CursorSimpleCursorAdapterを使用することです。

第二のステップは、ユーザがエントリを追加するときSQLiteDatabaseinsert()を行うことで、その後requery()CursorListViewを更新します。

Here is a sample projectこれを実証しています。 Here is another

+0

私はそれを試してみます。 – Cg2916

+0

insert()を取得できません。 – Cg2916

+0

私はまた、カーソルのコードが必要です – Cg2916

関連する問題