Удалить элемент из списка RecyclerView, а также MySql, используя PHP - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь удалить элемент из моего списка утилизации, а также из базы данных MySql, используя файл PHP. Я могу удалить запись из MySql правильно, но проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти способ удалить ее из RecyclerView. Пробовал искать решения, но не работал. Любая помощь будет очень признательна.

Я пробовал различные решения от самого StackOverflow, но они не работали для меня, потому что я не могу найти способ передать позицию выбранного представления в моем коде, чтобы удалить из списка.

Дайте мне знать, нужен ли еще какой-либо код.

Это мой код.

ExpenseEntryAdapter. java


public class ExpenseEntryAdapter extends RecyclerView.Adapter<ExpenseEntryAdapter.ExpenseViewHolder> {

    private Context mCtx;

    private List<GetDataActivity> expenseList;

    int id;

    public ExpenseEntryAdapter(Context mCtx, List<GetDataActivity> expenseList){

        this.mCtx = mCtx;
        this.expenseList = expenseList;

    }

    @Nullable
    @Override
    public ExpenseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mCtx);
        View view = inflater.inflate(R.layout.recycler_expense_view, null);
        return new ExpenseViewHolder(view);

    }

    @Override
    public void onBindViewHolder(ExpenseViewHolder holder, int position) {

        GetDataActivity getDataActivity = expenseList.get(position);

        holder.itmnm_txtvw.setText(getDataActivity.getItemname());
        holder.itmdate_txtvw.setText(getDataActivity.getBatchdate());
        holder.itmprice_txtvw.setText(String.valueOf(getDataActivity.getExpprice()));
        holder.itmid_txtvw.setText(String.valueOf(getDataActivity.getId()));

    }

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



    class ExpenseViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener {

        TextView itmnm_txtvw,itmdate_txtvw,itmprice_txtvw,itmid_txtvw;

        private ExpenseViewHolder(View itemView) {
            super(itemView);

            itmid_txtvw = itemView.findViewById(R.id.txtvw_expense_itemid);
            itmnm_txtvw = itemView.findViewById(R.id.txtvw_expenseentry_name);
            itmdate_txtvw = itemView.findViewById(R.id.txtvw_expenseentry_date);
            itmprice_txtvw = itemView.findViewById(R.id.txtvw_expenseentry_price);

            itemView.setOnCreateContextMenuListener(this);
        }


        @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {

            menu.setHeaderTitle("Select Action");
            MenuItem Delete = menu.add(Menu.NONE,1,1,"Delete");
            Delete.setOnMenuItemClickListener(onEditMenu);

        }

        private void serverdelete(final int id){

            StringRequest stringRequest2 = new StringRequest(Request.Method.POST
                    , Constants.URL_DELETE_EXPENSE_DATA, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    Toast.makeText(mCtx, response, Toast.LENGTH_SHORT).show();

                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                    Toast.makeText(mCtx, error.toString(), Toast.LENGTH_SHORT).show();

                }
            }){

                protected Map<String, String> getParams(){

                    Map<String, String> params = new HashMap<>();

                    params.put("item_id", String.valueOf(id));

                    return params;

                }

            };

            RequestHandler.getInstance(mCtx).addToRequestQueue(stringRequest2);
        }


        private final MenuItem.OnMenuItemClickListener onEditMenu = new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {

                switch (item.getItemId()){
                    case 1:

                        serverdelete(expenseList.get(getAdapterPosition()).getId());

                        break;
                }

                return true;
            }
        };

    }

}



Ответы [ 2 ]

0 голосов
/ 21 января 2020

Вы можете использовать этот код.

внутри onBindViewHolder ()

 holder.itemView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener({

       @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            menu.setHeaderTitle("Select Action");
            MenuItem Delete = menu.add(Menu.NONE,1,1,"Delete");
            Delete.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {

                    switch (item.getItemId()){
                        case 1:

                            serverdelete(expenseList.get(position).getId());

                            break;
                    }

                    return true;
                }
            });
        }

    });
0 голосов
/ 21 января 2020

Вам необходимо удалить элемент из вашего набора данных, т. Е. Счет со списком расходов, а также из списка переработчиков. Добавьте приведенный ниже код в свой onResponse внутри метода serverdelete.

expenseList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, expenseList.size());

и измените параметр метода serverdelete на

serverdelete(getAdapterPosition());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...