安卓开发小技巧:使用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数据库。