开发者

How do I load and save ListView items to an SQLiteDatabase?

开发者 https://www.devze.com 2023-02-06 20:43 出处:网络
I want to make it so that a user clicks a button to open a dialog, the user types in the name of an item, they click OK, and the item gets added to the ListView. So far, I\'ve gotten to the point wher

I want to make it so that a user clicks a button to open a dialog, the user types in the name of an item, they click OK, and the item gets added to the ListView. So far, I've gotten to the point where the item gets added to the ListView, but there's no way to save the data. I have a helper called DataHelper that creates the SQLiteDatabase, but I can't figure out how to save it to the database. I will need a code example because I'm not that experienced.

Here's my .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("");
                }
            });
       }
        });
    }
}

My DataHelper class:

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);
            }
        }
}

My 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>

And my 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_r开发者_开发技巧oot"
  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>

Thanks in advance!


How do I load and save ListView items to an SQLiteDatabase?

That's the wrong question, IMHO. The right question is:

How do I get a ListView to reflect what is in my SQLiteDatabase?

The first step is to use a Cursor and SimpleCursorAdapter, rather than an ArrayList and an ArrayAdapter.

The second step is to do an insert() on the SQLiteDatabase when the user adds an entry, then requery() the Cursor to update the ListView.

Here is a sample project that demonstrates this. Here is another.

0

精彩评论

暂无评论...
验证码 换一张
取 消