У меня есть список gridview, который показывает мне все элементы из моей базы данных sqlite, я хочу установить флажок, чтобы просматривать из списка только элементы, которые содержат слова, которые я проверял. Как мне это сделать?
Моя база данных sqlite содержит строки, состоящие из ImageView и 3 TextView.
Мой код:
public class SQLiteHelper extends SQLiteOpenHelper {
public SQLiteHelper(Context context, String nume, SQLiteDatabase.CursorFactory factory, int version) {
super(context, nume, factory, version);
}
public void queryData(String sql){
SQLiteDatabase database = getWritableDatabase();
database.execSQL(sql);
}
public void insertData(String nume, String promotie,String clasa, byte[] image){
SQLiteDatabase database = getWritableDatabase();
String sql = "INSERT INTO panel VALUES (NULL, ?, ?, ?)";
SQLiteStatement statement = database.compileStatement(sql);
statement.clearBindings();
statement.bindString(1, nume);
statement.bindString(2, promotie);
statement.bindString(3, clasa);
statement.bindBlob(4, image);
statement.executeInsert();
}
public void updateData(String nume, String promotie,String clasa, byte[] image, int id) {
SQLiteDatabase database = getWritableDatabase();
String sql = "UPDATE panel SET nume = ?, promotie = ?,clasa= ?, image = ? WHERE id = ?";
SQLiteStatement statement = database.compileStatement(sql);
statement.bindString(1, nume);
statement.bindString(2, promotie);
statement.bindString(3, clasa);
statement.bindBlob(4, image);
statement.bindDouble(5, (double)id);
statement.execute();
database.close();
}
public void deleteData(int id) {
SQLiteDatabase database = getWritableDatabase();
String sql = "DELETE FROM panel WHERE id = ?";
SQLiteStatement statement = database.compileStatement(sql);
statement.clearBindings();
statement.bindDouble(1, (double)id);
statement.execute();
database.close();
}
public Cursor getData(String sql){
SQLiteDatabase database = getReadableDatabase();
return database.rawQuery(sql, null);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
Мой PanelList
public class PanelList extends AppCompatActivity{
GridView gridView;
ArrayList<panel> list;
PanelListAdapter adapter = null;
public ImageView imageView;
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.panel_list_activity);
gridView = (GridView) findViewById(R.id.gridView);
list = new ArrayList<>();
adapter = new PanelListAdapter(this, R.layout.panel_items, list);
gridView.setAdapter(adapter);
// preia date din sqlite
Cursor cursor = MainActivity.sqLiteHelper.getData("SELECT * FROM panel");
list.clear();
while (cursor.moveToNext()) {
int id = cursor.getInt(0);
String nume = cursor.getString(1);
String promotie = cursor.getString(2);
String clasa = cursor.getString(3);
byte[] image = cursor.getBlob(4);
list.add(new panel(nume, promotie,clasa, image, id));
}
adapter.notifyDataSetChanged();
gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
CharSequence[] items = {"Update", "Delete"};
AlertDialog.Builder dialog = new AlertDialog.Builder(PanelList.this);
dialog.setTitle("Choose an action");
AlertDialog.Builder builder = dialog.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (item == 0) {
// update
Cursor c = MainActivity.sqLiteHelper.getData("SELECT id FROM panel");
ArrayList<Integer> arrID = new ArrayList<Integer>();
while (c.moveToNext()) {
arrID.add(c.getInt(0));
}
// show dialog update at here
showDialogUpdate(PanelList.this, arrID.get(position));
} else {
// delete
Cursor c = MainActivity.sqLiteHelper.getData("SELECT id FROM panel");
ArrayList<Integer> arrID = new ArrayList<Integer>();
while (c.moveToNext()) {
arrID.add(c.getInt(0));
}
showDialogDelete(arrID.get(position));
}
}
});
dialog.show();
return true;
}
ImageView imageView;
private void showDialogUpdate(Activity activity, final int position){
final Dialog dialog = new Dialog(activity);
dialog.setContentView(R.layout.update_panel_activity);
dialog.setTitle("Update");
imageView = (ImageView) dialog.findViewById(R.id.imageView);
final EditText edtnume = (EditText) dialog.findViewById(R.id.edtnume);
final EditText edtclasa = (EditText) dialog.findViewById(R.id.edtclasa);
final EditText edtpromotie = (EditText) dialog.findViewById(R.id.edtpromotie);
Button btnUpdate = (Button) dialog.findViewById(R.id.btnUpdate);
// set width for dialog
int width = (int) (activity.getResources().getDisplayMetrics().widthPixels * 0.95);
// set height for dialog
int height = (int) (activity.getResources().getDisplayMetrics().heightPixels * 0.7);
dialog.getWindow().setLayout(width, height);
dialog.show();
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// request photo library
ActivityCompat.requestPermissions(
PanelList.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
888
);
}
});
btnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
MainActivity.sqLiteHelper.updateData(
edtnume.getText().toString().trim(),
edtpromotie.getText().toString().trim(),
edtclasa.getText().toString().trim(),
MainActivity.imageViewToByte(imageView),
position
);
dialog.dismiss();
Toast.makeText(getApplicationContext(), "Update successfully!!!",Toast.LENGTH_SHORT).show();
}
catch (Exception error) {
Log.e("Update error", error.getMessage());
}
updatePanelList();
}
});
}
private void showDialogDelete(final int idpanel){
final AlertDialog.Builder dialogDelete = new AlertDialog.Builder(PanelList.this);
dialogDelete.setTitle("Warning!!");
dialogDelete.setMessage("Are you sure you want to this delete?");
dialogDelete.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
MainActivity.sqLiteHelper.deleteData(idpanel);
Toast.makeText(getApplicationContext(), "Delete successfully!!!",Toast.LENGTH_SHORT).show();
} catch (Exception e){
Log.e("error", e.getMessage());
}
updatePanelList();
}
});
dialogDelete.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialogDelete.show();
}
});
}
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == 888){
if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 888);
}
else {
Toast.makeText(getApplicationContext(), "You don't have permission to access file location!", Toast.LENGTH_SHORT).show();
}
return;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 888 && resultCode == RESULT_OK && data != null){
Uri uri = data.getData();
try {
InputStream inputStream = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
private void updatePanelList() {
Cursor cursor = MainActivity.sqLiteHelper.getData("SELECT * FROM panel");
list.clear();
while (cursor.moveToNext()) {
int id = cursor.getInt(0);
String nume = cursor.getString(1);
String promotie = cursor.getString(2);
String clasa = cursor.getString(3);
byte[] image = cursor.getBlob(4);
list.add(new panel(nume, promotie,clasa, image, id));
}
adapter.notifyDataSetChanged();
}
}
Мой PanelListAdapter
public class PanelListAdapter extends BaseAdapter {
private Context context;
private int layout;
private ArrayList<panel> panelsList;
public PanelListAdapter(Context context, int layout, ArrayList<panel> panelsList) {
this.context = context;
this.layout = layout;
this.panelsList = panelsList;
}
@Override
public int getCount() {
return panelsList.size();
}
@Override
public Object getItem(int position) {
return panelsList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
private class ViewHolder{
ImageView imageView;
TextView txtnume, txtpromotie;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
View row = view;
ViewHolder holder = new ViewHolder();
if(row == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(layout, null);
holder.txtnume = row.findViewById(R.id.txtnume);
holder.txtpromotie = row.findViewById(R.id.txtpromotie);
holder.imageView = row.findViewById(R.id.imgPanel);
row.setTag(holder);
}
else {
holder = (ViewHolder) row.getTag();
}
panel panel = panelsList.get(position);
holder.txtnume.setText(panel.getNume());
holder.txtpromotie.setText(panel.getPromotie());
byte[] panelImage = panel.getImage();
Bitmap bitmap = BitmapFactory.decodeByteArray(panelImage, 0, panelImage.length);
holder.imageView.setImageBitmap(bitmap);
return row;
}
}