Как получить список в виде сетки только с отмеченными элементами? - PullRequest
1 голос
/ 08 февраля 2020

У меня есть список 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...