简体   繁体   中英

Creating a notification inside DialogFragment class doesn't work! (Android)

I've been searching around and tried different solutions but I can't seem to get this to work.

I have a MainActivity with a list and an "Add" button. When i click the addbutton i open a DialogFragment. In the dialog user inputs data and press "add" and i want a notification that says "xxxx has been added to list" but it never shows.

I have a seperate class for AddDialog which looks like this:

public class AddDialogFragment extends DialogFragment {
Button btnAdd;
Button btnCancel;
TextView etNewSerial, etNewBrand, etNewModel;
String newSerial, newBrand, newModel;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View rootView = inflater.inflate(R.layout.dialog_add, container, false);
    getDialog().setTitle("Add new serial!");
    btnAdd = (Button) rootView.findViewById(R.id.btnAddNew);
    etNewSerial = (TextView) rootView.findViewById(R.id.etNewSerial);
    etNewBrand = (TextView) rootView.findViewById(R.id.etNewBrand);
    etNewModel = (TextView) rootView.findViewById(R.id.etNewModel);

    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             newSerial = etNewSerial.getText().toString();
             newBrand = etNewBrand.getText().toString();
             newModel = etNewModel.getText().toString();

            String url = "MY_VOLLEY_URL"
            StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    int icon = 0;
                    CharSequence notiText = "Item Added!";
                    long notiTime = System.currentTimeMillis();
                    CharSequence notiTitle = "Item Added!";//Titel
                    CharSequence notiContent = newSerial + " added!";
                    PendingIntent pendingIntent = PendingIntent.getActivity(getActivity(), 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT);
                    NotificationCompat.Builder notBuilder = new NotificationCompat.Builder(getActivity());
                    notBuilder.setSmallIcon(icon)
                            .setTicker(notiText)
                            .setWhen(notiTime)
                            .setAutoCancel(true)
                            .setContentText(notiContent)
                            .setContentTitle(notiTitle)
                            .setContentIntent(pendingIntent);
                    Notification notification = notBuilder.build();
                    NotificationManager myNotificationManager = (NotificationManager)getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
                    myNotificationManager.notify(1, notification);
                    getDialog().dismiss();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            });
            Volley.newRequestQueue(getActivity()).add(request);
        }
    });
    return rootView;
}
}

But the notification never shows. I've been trying to replace the "getActivity()" with different methods for context but it doesn't seem to matter. Does anyone has some tips to make this possible?

I wonder you are getting this error because your are passing 0 as the resourceId for the small icon ( setSmallIcon ). Maybe, NotificationManager is ignoring this notification since it can not built properly (there's no resource with 0 as ID.

So, try to change this:

notBuilder.setSmallIcon(icon)
    ....

To:

notBuilder.setSmallIcon(android.R.color.transparent)
    ....

I use android.R.color.transparent as example since you are not interested in show any icon anyway. But you can change to any color/drawable etc...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM