【问题标题】:By long clicking on listview delete its contents from SQLite and listview that is clicked通过长按列表视图从 SQLite 和单击的列表视图中删除其内容
【发布时间】:2017-03-14 00:05:04
【问题描述】:

谁能告诉我如何通过长按从 SQLite 数据库和列表视图中删除内容?另外,我必须只删除 SQLite 数据库中的内容还是同时删除 SQLite 数据库和 listview 中的内容?

这是我的项目类:

数据库助手

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 3;
    private static final String DATABASE_NAME = "products.db";
    private static final String TABLE_NAME = "products";

    private static final String COLUMN_ID = "_id";
    private static final String MARKET = "market";
    private static final String PRODUCT = "product";
    private SQLiteDatabase db;

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + MARKET + " TEXT, "
                + PRODUCT + " TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME + "");
        onCreate(db);
    }
    public Cursor getRecords() {
        db = getReadableDatabase();
        return db.rawQuery(
                "SELECT * FROM " + TABLE_NAME,
                null);

    }

    public void addRecords(String market, String product) {
        db = getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(MARKET, market);
        contentValues.put(PRODUCT, product);
        db.insert(TABLE_NAME, null, contentValues);
        db.close();
    }
    public void deleteRecords(int id){
    }}

MainActivity

public class MainActivity extends AppCompatActivity {

    ListView lv;
    DatabaseHelper databaseHelper;
    ShoppingCartAdapter shoppingCartAdapter;
    private static final int TIME_ENTRY_REQUEST_CODE = 1;
    Cursor cursor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.list_view_main);
        databaseHelper = new DatabaseHelper(this);
        ListView listView = (ListView) findViewById(R.id.list_view_main);
        shoppingCartAdapter = new ShoppingCartAdapter(this, databaseHelper.getRecords(), CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
        listView.setAdapter(shoppingCartAdapter);

        lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(final AdapterView<?> parent, View view, int position, long id) {
                final int pos = position;
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("Are you sure you want to delete?");
                builder.setPositiveButton("DELETE", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                    }
                });
                builder.setNegativeButton("CANCEL", null);
                builder.show();
                return true;
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.menu_template, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.menu_add_id) {
            Intent intent = new Intent(this, AddContentActivity.class);
            startActivityForResult(intent, TIME_ENTRY_REQUEST_CODE);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == TIME_ENTRY_REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                String market = data.getStringExtra("market");
                String product = data.getStringExtra("product");
                databaseHelper.addRecords(market, product);
                shoppingCartAdapter.changeCursor(databaseHelper.getRecords());
            }
        }
    }

}

AddContentActivity

public class AddContentActivity extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_addcontent);
    }
    public void onAddButton(View view){
        Intent intent = getIntent();
        EditText marketet = (EditText) findViewById(R.id.marketet_id);
        EditText productet = (EditText) findViewById(R.id.productet_id);
        intent.putExtra("market", marketet.getText().toString());
        intent.putExtra("product", productet.getText().toString());
        this.setResult(RESULT_OK, intent);
        finish();
    }
}

ShoppingCartAdapter

public class ShoppingCartAdapter extends CursorAdapter{
    public ShoppingCartAdapter(Context context, Cursor cursor, int flags){
        super(context, cursor, flags);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        TextView marketTv = (TextView) view.findViewById(R.id.markettv_id);
        TextView productTv = (TextView) view.findViewById(R.id.producttv_id);
        marketTv.setText(cursor.getString(1));
        productTv.setText(cursor.getString(2));
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.list_view_template, parent, false);
        return view;
    }
}

【问题讨论】:

    标签: android sqlite listview sql-delete


    【解决方案1】:

    几天后,我找到了问题的解决方案。如果有更好的删除方法,请发布答案。

    我添加了以下代码行:

    主要活动

    Cursor cursor = (Cursor) parent.getItemAtPosition(pos);
    final int item_id = cursor.getInt(cursor.getColumnIndex("_id"));
    databaseHelper.deleteRecords(item_id );
    cursor.requery();
    

    数据库助手

    public void deleteRecords(int id){
            db.delete(TABLE_NAME, COLUMN_ID + "=" + id, null);
        }
    

    编辑:

    cursor.requery();替换为

    shoppingCartAdapter.changeCursor(databaseHelper.getRecords());
    

    因为使用 requery();已弃用,但两行代码都有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      相关资源
      最近更新 更多