vendredi 6 novembre 2015

How to remove item from SQLite Android?

I have one RecyclerView and my method in RecyclerView adapter is working, but only for position i select and for example, when i click image with sign X i'm deleting first item which i positioned in remove method, but i want this to happens when user click image with sign X, to give him ability to select what item from the list he will delete. Also i would like to delete that item from SQLite, but my method isn't good probably in helper class.

Here is MainActivity:

    public class MainActivity extends AppCompatActivity {

    RecyclerView mRecyclerView;
    RecyclerView.LayoutManager mLayoutManager;
    GridAdapter mGridAdapter;
    DBHelper dbh;
    String firstName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

        initAddImage();

        dbh = new DBHelper(this);

        initRecyclerView();

        initDeleteImage();
    }

    public List<Birthday> getData() {
        List<Birthday> birthdays = new ArrayList<>();
        Birthday birthday = null;
        Cursor c = dbh.getBirthdayData();
        if (c != null) {
            while (c.moveToNext()) {
                int nameIndex = c.getColumnIndex(dbh.BIRTHDAY_NAME);
                String nameText = c.getString(nameIndex);
                this.firstName = nameText;

                int lastNameIndex = c.getColumnIndex(dbh.BIRTHDAY_LAST_NAME);
                String lastNameText = c.getString(lastNameIndex);

                birthday = new Birthday();
                birthday.setNAME(nameText);
                birthday.setLAST_NAME(lastNameText);
                birthdays.add(birthday);

            }
        }
        return birthdays;
    }

    private void initRecyclerView(){
        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        mRecyclerView.setItemAnimator(new ScaleInAnimator());

        // The number of Columns
        mRecyclerView.setHasFixedSize(true);

        mLayoutManager = new GridLayoutManager(this, 3);
        mRecyclerView.setLayoutManager(mLayoutManager);

        mGridAdapter = new GridAdapter(getData());

        mRecyclerView.setAdapter(mGridAdapter);
    }

    private void initAddImage(){
        ImageView addImage = (ImageView) findViewById(R.id.add_image);
        addImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, AddBirthday.class);
                startActivity(intent);
            }
        });
    }

    private void initDeleteImage(){
        ImageView deleteImage = (ImageView) findViewById(R.id.delete_image);
        deleteImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mGridAdapter.removeItem(0);
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        initRecyclerView();
    }
}

Here is my RecyclerView Adapter:

    public class GridAdapter extends RecyclerView.Adapter<GridAdapter.MyViewHolder> {

    private List<Birthday> birthdays;
    DBHelper dbh;


    public GridAdapter(List<Birthday> birthdays){
        this.birthdays = birthdays;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        CustomTextView firstName, lastName;
        TextView dateOfBirthday;

        public MyViewHolder(View itemView) {
            super(itemView);
            firstName = (CustomTextView) itemView.findViewById(R.id.first_name);
            lastName = (CustomTextView) itemView.findViewById(R.id.last_name);
            dateOfBirthday = (TextView) itemView.findViewById(R.id.date_of_birthday);
        }
    }

    public void removeItem(int position) {
        birthdays.remove(position);
        notifyItemRemoved(position);
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_item, parent, false);
        MyViewHolder holder = new MyViewHolder(v);
        return holder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.firstName.setText(birthdays.get(position).getNAME());
        holder.lastName.setText(birthdays.get(position).getLAST_NAME());


    }

    @Override
    public int getItemCount() {
        return birthdays.size();
    }

}

And here is my Database: Method for deleting item is at the bottom of class

public class DBHelper extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;

private static final String DATABASE_NAME = "_database";

private static final String BIRTHDAY_TABLE_NAME = "birthday_table";

public static final String BIRTHDAY_ID = "birthday_id";
public static final String BIRTHDAY_NAME = "birthday_name";
public static final String BIRTHDAY_LAST_NAME = "birthday_last_name";

private static final String CREATE_BIRTHDAY_TABLE = "CREATE TABLE " + BIRTHDAY_TABLE_NAME +
        " ( " + BIRTHDAY_ID + " INTEGER PRIMARY KEY,"
        + BIRTHDAY_NAME + " TEXT," + BIRTHDAY_LAST_NAME + " TEXT );";

SQLiteDatabase database;

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

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_BIRTHDAY_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + BIRTHDAY_TABLE_NAME);
    onCreate(db);
}

public void setBirthdayData(String birthdayName, String birthdayLastName) {
    database = getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(BIRTHDAY_NAME, birthdayName);
    cv.put(BIRTHDAY_LAST_NAME, birthdayLastName);
    database.insert(BIRTHDAY_TABLE_NAME, null, cv);
}


public Cursor getBirthdayData() {
    database = getReadableDatabase();
    String[] columns = {BIRTHDAY_ID, BIRTHDAY_NAME, BIRTHDAY_LAST_NAME};
    Cursor c = database.query(BIRTHDAY_TABLE_NAME, columns, null, null, null, null, BIRTHDAY_ID + " DESC");
    return c;
}

public Cursor getBirthdayName(String[] args) {
    database = getReadableDatabase();
    String query = "SELECT " + BIRTHDAY_NAME + " FROM " + BIRTHDAY_TABLE_NAME + " WHERE " + BIRTHDAY_NAME + " =?";
    Cursor c = database.rawQuery(query, args);
    return c;
}

public boolean deleteItem(long rowId) {
    SQLiteDatabase db = getWritableDatabase();
    return db.delete(BIRTHDAY_TABLE_NAME, BIRTHDAY_ID + "=" + rowId, null) > 0;
}

}

Aucun commentaire:

Enregistrer un commentaire