Android 基于存储在SQLite中的主键编辑ListView
我有一个listview,它有多个项目,所有数据当前都存储在数据库中。我希望能够通过列表视图编辑和删除所选项目Android 基于存储在SQLite中的主键编辑ListView,android,sqlite,listview,android-cursoradapter,Android,Sqlite,Listview,Android Cursoradapter,我有一个listview,它有多个项目,所有数据当前都存储在数据库中。我希望能够通过列表视图编辑和删除所选项目 String CREATE_DRINK_TABLE = "CREATE TABLE drinks (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "type TEXT, " + "volume DOUBLE, " + "time TEXT, " + "abv DOU
String CREATE_DRINK_TABLE = "CREATE TABLE drinks (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"type TEXT, " + "volume DOUBLE, " + "time TEXT, " +
"abv DOUBLE, " +
"image BLOB )";
//create drinks table
database.execSQL(CREATE_DRINK_TABLE);
}
之后,我有一个游标适配器
public List<NewDrink> getAllNewDrinks(){
List<NewDrink> newDrinks = new LinkedList<NewDrink>();
//1.build the query
String query = "SELECT * FROM " + TABLE_DRINKS;
//2. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query,null);
//3.go over each row,build book and add it to list
NewDrink newdrink = null;
if(cursor.moveToFirst()){
do{
newdrink = new NewDrink();
newdrink.setId(Integer.parseInt(cursor.getString(0)));
newdrink.setType(cursor.getString(1));
newdrink.setVolume(cursor.getDouble(2));
newdrink.setTime(cursor.getString(3));
newdrink.setAbv(cursor.getDouble(4));
newdrink.setImage(cursor.getBlob(5));
newDrinks.add(newdrink);
}while(cursor.moveToNext());
}
db.close();
return newDrinks;
}
一旦到了这里,我就把输入列表视图的所有饮料填充进去。但是,在列表视图中,我希望能够删除和编辑输入的饮料
公共类DrinkLog_屏幕扩展活动{
AlcoholDBHelper db = new AlcoholDBHelper(this);
ArrayList<NewDrink> imageArray = new ArrayList<NewDrink>();
ContactImageAdapter adapter;
ListView dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drink_log__screen);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
List<NewDrink> newdrinks = new ArrayList<NewDrink>();
newdrinks = db.getAllNewDrinks();
for(NewDrink nd : newdrinks){
imageArray.add(nd);
}
adapter = new ContactImageAdapter(this,R.layout.image_screen_list,imageArray);
ListView dataList = (ListView)findViewById(R.id.drink_list);
dataList.setAdapter(adapter);
registerForContextMenu(dataList);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.drink_log__screen, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
public void goToMainScreen (View v) {
Intent intent = new Intent(this,Main_Screen.class);
startActivity(intent);
}
}
这是我的列表视图的xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="#ff1a1a1a">
<ListView
android:layout_width="wrap_content"
android:layout_height="470dp"
android:id="@+id/drink_list"
android:cacheColorHint="#0000"
android:textColor="#ffffffff"
android:layout_below="@+id/btnReturnMS"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnReturnMS"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="20sp"
android:textColor="#ffffffff"
android:text="@string/drink_log" />
<Button
android:layout_width="wrap_content"
android:layout_height="45dp"
android:text="@string/return_to_main_screen"
android:id="@+id/btnLogin"
android:layout_alignParentBottom="true"
android:textColor="#ffffffff"
android:textSize="15sp"
android:onClick="goToMainScreen"
android:background="#ff302f2e"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
在listview中,您可以像这样添加一个setOnItemClickListener
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
YOurClass item = (YourClass) listview.getItemAtPosition(position);
/* get method from obtain your id ->getIdYourClass(); from each item from your listview */
int id= item.getIdYourClass();
/*
pass data to custom dialog or another activity and them edit a row
example-..
*/
dialogEdit(id);
}
});
我希望能帮上忙,为我的英语乐队感到抱歉。。。问题是,如何通过列表视图编辑存储在数据库中的内容?我在网上读了很多教程,但我无法将其应用到我的代码中。例如,在英语中,你不能通过为版本做布局然后更新数据库来阅读它。。。在阅读官方指南后应该很容易,但如何通过列表视图选择?并从所选列表视图项中弹出相同的数据以填充到编辑页面中?所有内容都在指南中。。。在有关listview和适配器的主题中介绍。。