Android 基于存储在SQLite中的主键编辑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

我有一个listview,它有多个项目,所有数据当前都存储在数据库中。我希望能够通过列表视图编辑和删除所选项目

 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和适配器的主题中介绍。。