निम्न विधि DbProvider वर्ग से है:

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

मुझे उपरोक्त विधि को VenueDetailsFragment कक्षा से और विशेष रूप से अलर्ट डायलॉग की ऑनक्लिक विधि से कॉल करने की आवश्यकता है। यह कोड नीचे है:

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;
    }
}

अनिवार्य रूप से, जब एक डिलीट बटन पर क्लिक किया जाता है, तो एक डायलॉग दिखाई देता है जहां उपयोगकर्ता पुष्टि करता है कि वे हटाना चाहते हैं। एक बार पुष्टि हो जाने के बाद, डिलीट वेन्यू विधि को कॉल किया जाना चाहिए जो डेटाबेस से वेन्यू को हटा देता है और उपयोगकर्ता को वेन्यू के सूची दृश्य (विस्तृत दृश्य के बजाय) पर लौटाता है (हटाए गए स्थान के साथ अब सूचीबद्ध नहीं है)।

अगर अधिक कोड या जानकारी सहायता करेगी तो कृपया मुझे बताएं। अग्रिम में धन्यवाद।

-2
stricken16 15 अप्रैल 2020, 19:48

1 उत्तर

सबसे बढ़िया उत्तर

आप अपने 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();
0
Advice-Dog 15 अप्रैल 2020, 17:11