安卓开发小技巧:使用listview编辑数据库 (安卓中的listview可以编辑数据库)

安卓开发小技巧:使用ListView编辑数据库

随着智能手机的广泛普及,Android系统成为了更受欢迎的移动操作系统之一。作为一名Android开发者,我们需要掌握许多技能来开发高质量的应用程序。其中一个重要技能就是使用ListView编辑数据库。

ListView是Android应用程序中最常用的控件之一。它可以展示大量数据,同时支持用户交互和数据编辑。对于那些需要展示和编辑大量数据的应用程序而言,ListView是不可或缺的。

那么,如何使用ListView编辑数据库呢?我们需要掌握Android开发中的SQLite数据库。SQLite是一种轻量级的嵌入式关系数据库管理系统。它在Android系统中广泛使用,并提供了一个API来操作它。

1.创建数据库

我们可以使用SQLiteOpenHelper类来管理SQLite数据库,该类提供了SQLite创建和更新的方法。我们需要继承它,并实现onCreate()和onUpgrade()方法:

“`java

public class MyDatabaseHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = “my_database”;

private static final int DATABASE_VERSION = 1;

public MyDatabaseHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION); //调用父类构造函数

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(“CREATE TABLE IF NOT EXISTS my_table (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)”); //创建表

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL(“DROP TABLE IF EXISTS my_table”); //删除旧表

onCreate(db); //重新创建表

}

}

“`

上面的代码创建了一个名为“my_database”的数据库,并创建了一个名为“my_table”的表。该表包含一个_id列,一个name列和一个age列。

2.创建适配器

接下来,我们需要创建一个适配器来连接ListView和SQLite数据库。适配器是ListView的一个关键部分,它负责提供ListView所需的数据。我们需要以CursorAdapter为基础,并实现它的getView()方法。

“`java

public class MyCursorAdapter extends CursorAdapter {

private LayoutInflater mInflater;

private MyDatabaseHelper mDatabaseHelper;

public MyCursorAdapter(Context context, Cursor cursor) {

super(context, cursor, false);

mInflater = LayoutInflater.from(context);

mDatabaseHelper = new MyDatabaseHelper(context);

}

@Override

public void bindView(View view, Context context, Cursor cursor) {

ViewHolder viewHolder = (ViewHolder) view.getTag();

viewHolder.nameTextView.setText(cursor.getString(cursor.getColumnIndex(“name”)));

viewHolder.ageTextView.setText(String.valueOf(cursor.getInt(cursor.getColumnIndex(“age”))));

}

@Override

public View newView(Context context, Cursor cursor, ViewGroup parent) {

View view = mInflater.inflate(R.layout.list_item, parent, false);

ViewHolder viewHolder = new ViewHolder();

viewHolder.nameTextView = (TextView) view.findViewById(R.id.name_text_view);

viewHolder.ageTextView = (TextView) view.findViewById(R.id.age_text_view);

view.setTag(viewHolder);

return view;

}

private static class ViewHolder {

private TextView nameTextView;

private TextView ageTextView;

}

}

“`

在上面的代码中,我们创建了一个ViewHolder类来保存ListView行中的数据。而且,我们在bindView()方法中根据cursor获取数据库的数据,并在ViewHolder中的TextView中显示。

3.使用ListView编辑数据库

我们需要更新ListView中的数据,并在SQLite数据库中进行相应更新。ListView的监听器可以帮助我们实现此操作。我们可以在ListView中添加OnItemClickListener和OnItemLongClickListener。

“`java

public class MnActivity extends AppCompatActivity {

private ListView mListView;

private MyCursorAdapter mAdapter;

private MyDatabaseHelper mDatabaseHelper;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_mn);

mListView = (ListView) findViewById(R.id.list_view);

mDatabaseHelper = new MyDatabaseHelper(this);

Cursor cursor = getData();

mAdapter = new MyCursorAdapter(this, cursor);

mListView.setAdapter(mAdapter);

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView parent, View view, int position, long id) {

showUpdateDialog(id);

}

});

mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

@Override

public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {

deleteItem(id);

return true;

}

});

}

private Cursor getData() {

SQLiteDatabase db = mDatabaseHelper.getReadableDatabase();

String[] columns = {“_id”, “name”, “age”};

String orderBy = “_id ASC”;

Cursor cursor = db.query(“my_table”, columns, null, null, null, null, orderBy);

cursor.moveToFirst();

return cursor;

}

private void showUpdateDialog(final long id) {

View view = LayoutInflater.from(this).inflate(R.layout.dialog_layout, null);

final EditText nameEditText = (EditText) view.findViewById(R.id.name_edit_text);

final EditText ageEditText = (EditText) view.findViewById(R.id.age_edit_text);

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle(“Update Item”);

builder.setView(view);

builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

String name = nameEditText.getText().toString();

int age = Integer.parseInt(ageEditText.getText().toString());

updateItem(id, name, age);

}

});

builder.setNegativeButton(android.R.string.cancel, null);

builder.show();

}

private void updateItem(long id, String name, int age) {

SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();

ContentValues values = new ContentValues();

values.put(“name”, name);

values.put(“age”, age);

String whereClause = “_id=?”;

String[] whereArgs = {String.valueOf(id)};

db.update(“my_table”, values, whereClause, whereArgs);

Cursor cursor = mAdapter.getCursor();

mAdapter.changeCursor(cursor);

}

private void deleteItem(long id) {

SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();

String whereClause = “_id=?”;

String[] whereArgs = {String.valueOf(id)};

db.delete(“my_table”, whereClause, whereArgs);

Cursor cursor = mAdapter.getCursor();

mAdapter.changeCursor(cursor);

}

}

“`

在上面的代码中,我们定义了一个getData()方法,它使用SQLite数据库中的查询方法来获取数据。我们还定义了showUpdateDialog()方法,在该方法中我们创建了一个自定义对话框,以便用户编辑ListView中的数据。利用独立的方法,我们选择了更新项和删除项。更新项后,我们需要重新加载ListView。

以上便是使用ListView编辑SQLite数据库的完整过程。虽然这仅仅是一个小小的技巧,但是它展示了如何使用Android API开发高效的应用程序。希望这篇文章能够帮助你更好地理解如何在Android应用中使用ListView和SQLite数据库。


数据运维技术 » 安卓开发小技巧:使用listview编辑数据库 (安卓中的listview可以编辑数据库)