Android Java - вызов метода из другого класса для удаления данных из базы данных - PullRequest
0 голосов
/ 15 апреля 2020

Следующий метод из класса DbProvider :

public void deleteVenue(UUID uuid)
{
    mDatabase.delete(VenueTable.NAME, VenueTable.Cols.UUID + " = ?",
    new String[] { uuid.toString() });
}

Мне нужно вызвать вышеупомянутый метод из класса VenueDetailsFragment и более конкретно из onClick метод оповещения. Этот код ниже:

package com.example.musicpro;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;

import androidx.fragment.app.Fragment;

import java.util.UUID;

public class VenueDetailsFragment extends Fragment {

    private Venue mVenue;
    private Button mDoneButton;
    private Button mDeleteButton;
    private EditText mVenueName;
    private EditText mVenueAddress;
    private EditText mOpeningTime;

    private static final String ARG_VENUE_ID = "venue_id";

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        UUID venueID = (UUID) getActivity().getIntent().getSerializableExtra(ARG_VENUE_ID);
        mVenue = DbProvider.get(getActivity()).getVenue(venueID);
    }

    @Override
    public void onPause()
    {
        super.onPause();

        mVenue.setVenueName(mVenueName.getText().toString());
        mVenue.setVenueAddress(mVenueAddress.getText().toString());
        mVenue.setOpeningTime(mOpeningTime.getText().toString());

        DbProvider.get(getActivity()).updateVenue(mVenue);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_venue_details, container, false);

        mVenueName = (EditText) v.findViewById(R.id.venue_name_edit);
        mVenueName.setText(mVenue.getVenueName());

        mVenueAddress = (EditText) v.findViewById(R.id.venue_address_edit);
        mVenueAddress.setText(mVenue.getVenueAddress());

        mOpeningTime = (EditText) v.findViewById(R.id.opening_time_edit);
        mOpeningTime.setText(mVenue.getOpeningTime());

        mDoneButton = (Button) v.findViewById(R.id.done_button);
        mDoneButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick (View v)
            {

            }
        });

        mDeleteButton = (Button) v.findViewById(R.id.delete_button);
        mDeleteButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                AlertDialog d = new AlertDialog.Builder(getActivity())
                        .setTitle(R.string.confirm_dialog)
                        .setMessage(R.string.delete_dialog)
                        .setPositiveButton(R.string.yes_dialog, new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which)
                            {
                                //I need to call the deleteVenue method here
                            }
                        })
                        .setNegativeButton(R.string.no_dialog, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        })
                        .create();
                d.show();
            }
        });

        return v;
    }
}

По существу, когда нажимается кнопка удаления, появляется диалоговое окно, где пользователь подтверждает, что он хочет удалить. После подтверждения должен быть вызван метод deleteVenue, который удаляет место из базы данных и возвращает пользователя в представление списка (вместо подробного просмотра) мест (где удаленное место больше не отображается в списке).

Если вам понадобится больше кода или информации, пожалуйста, дайте мне знать. Заранее спасибо.

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете создать поле для вашего DbProvider и установить его в вашем onCreate вместо того, чтобы получать экземпляр, когда вам это нужно.

private DbProvider mProvider;
private Venue mVenue;
// ...

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    UUID venueID = (UUID) getActivity().getIntent().getSerializableExtra(ARG_VENUE_ID);
    mProvider = DbProvider.get(getActivity());
    mVenue = mProvider.getVenue(venueID);
}

И затем использовать его в вашем слушателе.

@Override
public void onClick(View v) {
    AlertDialog d = new AlertDialog.Builder(getActivity())
            .setTitle(R.string.confirm_dialog)
            .setMessage(R.string.delete_dialog)
            .setPositiveButton(R.string.yes_dialog, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which)
                {
                    // Delete the venue with its UUID
                    mProvider.deleteVenue(mVenue.getUUID());
                }
            })
            .setNegativeButton(R.string.no_dialog, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            })
            .create();
    d.show();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...