2015-01-08 1 views
0

Я хотел бы иметь возможность удалять одну строку за раз в моей деятельности.Удалить строку из SQLite в android с помощью costum listadapter

Активность заполнена адаптером списка Costum. Я также использую класс DatabaseHelper. Я уже сделал метод deleteProduct в DbHelper.class. Как я могу вызвать эту функцию в своем Adapater, чтобы при щелчке в imageView (есть onclicklistener) щелкнутая строка будет удалена?

Costum ADAPTER:

package android.ehb.be.verdoodt.Activities; 

import android.content.Context; 
import android.ehb.be.verdoodt.DbFiles.Product; 
import android.ehb.be.verdoodt.R; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.ArrayList; 

/** 
* Created by Nick on 8/01/15. 
*/ 
public class ProductAdapter extends ArrayAdapter { 
    private final Context context; 
    private final ArrayList<Product> ProductArrayList; 

    public ProductAdapter(Context context, ArrayList<Product> ProductArrayList) { 

     super(context, R.layout.list_row_games, ProductArrayList); 

     this.context = context; 
     this.ProductArrayList = ProductArrayList; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     // 1. Create inflater 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     // 2. Get rowView from inflater 
     final View view = inflater.inflate(R.layout.list_row_games, parent, false); 

     // 3. Get the two text view from the rowView 
     final TextView Title = (TextView) view.findViewById(R.id.product_titel); 


     // 4. Set the text for textView 
     Title.setText(ProductArrayList.get(position).getProductnaam()); 

     ImageView imageView = (ImageView) view.findViewById(R.id.deleteProduct); 
     imageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.i("Adapter", "List Item Image Clicked"); 
       //DELETE HERE? 

      } 
     }); 

     // 5. return rowView 
     return view; 
    } 
} 

DBHELPER КЛАСС:

package android.ehb.be.verdoodt.DbFiles; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

import java.util.ArrayList; 

/** 
* Created by Nick on 2/01/15. 
*/ 

public class DbHelper extends SQLiteOpenHelper { 

    //TELKENS JE DB AANPAST DIT OOK ANPASSEN 
    public static final int DATABASE_VERSION = 7; 

    //DATABASE NAAM 
    public static final String DATABASE_NAME = "GegevensManager"; 

    //GEGEVENS TABELNAAM 
    private static final String TABLE_NAME = "gegevens"; 

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

    //ONCREATE AANGEROEPEN WANNEER DB VOOR EERSTE KEER WORDT AANGEMAAKT 
    //CREATIE VAN DE TABLES, ... 
    @Override 
    public void onCreate(SQLiteDatabase db) { 

     Log.i(this.getClass().toString(), "Database created !"); 

     String CREATE_GEGEVENS_TABLE = 
       "CREATE TABLE " + DatabaseContract.GegevensData.TABLE_NAME 
         + "(" 
         // + DatabaseContract.GegevensData.COLUMN_NAME_SOURCE + " TEXT," 
         + DatabaseContract.GegevensData.COLUMN_NAME_PRODUCT + " TEXT" 
         //+ DatabaseContract.GegevensData.COLUMN_NAME_DESCRIPTION + " TEXT," 
         //+ DatabaseContract.GegevensData.COLUMN_NAME_PRICE + " TEXT" 
         + ")"; 

     try { 
      db.execSQL(CREATE_GEGEVENS_TABLE); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

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

     Log.i("DbHelper", "Upgrade database"); 

     //VERWIJDER OUDERE TABEL ALS ZE BESTAAT 
     //VERGETE VERSIE VAN DB NIET AAN TE PASSEN 
     db.execSQL("DROP TABLE IF EXISTS " + DatabaseContract.GegevensData.TABLE_NAME); 

     //MAAK DE TABLE OPNIEUW 
     onCreate(db); 
    } 

    //DOWNGRADE 
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     onUpgrade(db, oldVersion, newVersion); 
    } 

    public void clear() { 
/* 
     SQLiteDatabase db = this.getWritableDatabase(); 
     db.execSQL(SQL_DELETE_ALBUM_ENTRIES); 
     db.execSQL(SQL_DELETE_ARTIST_ENTRIES); 
     db.execSQL(SQL_CREATE_ALBUM_ENTRIES); 
     db.execSQL(SQL_CREATE_ARTIST_ENTRIES);*/ 
    } 

    //FAVORIET PROCUT TOEVOEGEN 
    public Product addFavorietProduct(String productnaam) { 

     Product FavorietProduct = new Product(); 
     FavorietProduct.setProductnaam(productnaam); 

     SQLiteDatabase sqLiteDatabase = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(DatabaseContract.GegevensData.COLUMN_NAME_PRODUCT, productnaam); 

     String Mijnproduct = String.valueOf(sqLiteDatabase.insert(DatabaseContract.GegevensData.TABLE_NAME, null, values)); 
     FavorietProduct.setProductnaam(Mijnproduct); 
     return FavorietProduct; 
    } 

    public ArrayList<Product> getAlleFavorieteProducten() { 

     SQLiteDatabase db = this.getReadableDatabase(); 

     String selectQuery = "SELECT * FROM " + DatabaseContract.GegevensData.TABLE_NAME; 

     Cursor c = db.rawQuery(selectQuery, null); 

     ArrayList<Product> FavProducten = new ArrayList<Product>(); 

     if (c != null) { 
      while (c.moveToNext()) { 
       Product product = new Product(); 
       product.setProductnaam(c.getString(c.getColumnIndex(DatabaseContract.GegevensData.COLUMN_NAME_PRODUCT))); 

       FavProducten.add(product); 
      } 
     } 
     return FavProducten; 
    } 

    public void deleteProduct(String productnaam) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     //return db.delete(DatabaseContract.GegevensData.TABLE_NAME, DatabaseContract.GegevensData.COLUMN_NAME_PRODUCT + "=" + productnaam, null) > 0; 
     db.delete(DatabaseContract.GegevensData.TABLE_NAME, DatabaseContract.GegevensData.COLUMN_NAME_PRODUCT + "='" + productnaam + "'", null); 
     db.close(); 
    } 
} 

FAVPRODUCTENACTIVITY

public class FavProductenActivity extends Activity implements View.OnClickListener { 

    static DbHelper mijnDbHelper; 
    static ArrayList<Product> FavProducten; 
    static ListView listFavProducten; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.i("FavProductenActivity", "View Created"); 
     //Inflate fragment Lay-out 
     super.onCreate(savedInstanceState); 
     setContentView(android.ehb.be.verdoodt.R.layout.fav_producten_layout); 

     mijnDbHelper = new DbHelper(this); 
     mijnDbHelper.clear(); 

     FavProducten = mijnDbHelper.getAlleFavorieteProducten(); 
     loadFavProducten(); 
     listFavProducten = (ListView)findViewById(R.id.listFavProducten); 

     String GekozenProduct = (String) getIntent().getStringExtra("productnaam"); 

     if (GekozenProduct == null) { 

      Log.i("Gekozen favoriete product: ", "Geen geselecteerd"); 
      loadFavProducten(); 

     } else { 
      Log.i("Gekozen favoriete product: ", GekozenProduct); 

      Product gekozenProductToevoegen = mijnDbHelper.addFavorietProduct(GekozenProduct); 

      Log.i("mijnDbHelper Add Favoriet product : ", String.valueOf(gekozenProductToevoegen)); 
      Log.i("mijnDbHelper Add Favoriet product V2: ", gekozenProductToevoegen.getProductnaam()); 

      FavProducten.add(gekozenProductToevoegen); 
      loadFavProducten(); 
     } 
    } 

    public void loadFavProducten() { 

     //ArrayAdapter<Product> adapter; 

     if (listFavProducten == null){ 
      //DO THIS 
     } 
     else if (listFavProducten != null){ 

      /*adapter = new ArrayAdapter<Product>(this, android.R.layout.simple_list_item_1, FavProducten); 
      listFavProducten.setAdapter(adapter); 
      Log.i("FavProductenSize = ", String.valueOf(FavProducten.size())); 
      */ 

      ProductAdapter adapter = new ProductAdapter(this, mijnDbHelper.getAlleFavorieteProducten()); 
      listFavProducten.setAdapter(adapter); 
      mijnDbHelper.close(); 
     } 
    } 


    @Override 
    public void onClick(View v) { 
     //Log.i("FavProductenActivity2","Product deletet"); 
    } 
} 

ответ

1

Вместо инлайн создающего по умолчанию View.OnClickListener() а, вы можете продлить OnClickListener включить ссылку на щелкнули продукт и DbHelper

 
public class ProductAdapter extends ArrayAdapter { 
    ... 
    class ProductImageOnClickListener implements View.OnClickListener { 
     Product product; 
     DbHelper dbHelper;  

     public ProductImageOnClickListener(Product product, DbHelper dbHelper) { 
      this.product = product; 
      this.dbHelper = dbHelper; 
     } 

     @Override 
     public void onClick(View v) { 
     // Call delete here with the reference of product and dbhelper 
     } 

    } 
    ... 
} 

Затем вы можете установить ProductImageOnClickListener в ImageView.

Смежные вопросы