在 DialogFragment class 中创建通知不起作用! (Android)
Creating a notification inside DialogFragment class doesn't work! (Android)
我一直在四处寻找并尝试了不同的解决方案,但我似乎无法让它发挥作用。
我有一个带有列表和 "Add" 按钮的 MainActivity。当我单击添加按钮时,我打开了一个 DialogFragment。在对话框中,用户输入数据并按 "add",我想要一个显示 "xxxx has been added to list" 但从未显示的通知。
我有一个单独的 class 用于 AddDialog,如下所示:
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;
}
}
但通知从未显示。我一直在尝试用不同的上下文方法替换 "getActivity()" ,但这似乎并不重要。有没有人有一些技巧可以使这成为可能?
我想知道您收到此错误是因为您将 0
作为小图标 (setSmallIcon
) 的 resourceId
传递。也许,NotificationManager
忽略了此通知,因为它无法正确构建(没有以 0
作为 ID 的资源。
所以,尝试改变这个:
notBuilder.setSmallIcon(icon)
....
收件人:
notBuilder.setSmallIcon(android.R.color.transparent)
....
我以 android.R.color.transparent
为例,因为您对显示任何图标都不感兴趣。但是您可以更改为任何 color/drawable 等等...
我一直在四处寻找并尝试了不同的解决方案,但我似乎无法让它发挥作用。
我有一个带有列表和 "Add" 按钮的 MainActivity。当我单击添加按钮时,我打开了一个 DialogFragment。在对话框中,用户输入数据并按 "add",我想要一个显示 "xxxx has been added to list" 但从未显示的通知。
我有一个单独的 class 用于 AddDialog,如下所示:
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;
}
}
但通知从未显示。我一直在尝试用不同的上下文方法替换 "getActivity()" ,但这似乎并不重要。有没有人有一些技巧可以使这成为可能?
我想知道您收到此错误是因为您将 0
作为小图标 (setSmallIcon
) 的 resourceId
传递。也许,NotificationManager
忽略了此通知,因为它无法正确构建(没有以 0
作为 ID 的资源。
所以,尝试改变这个:
notBuilder.setSmallIcon(icon)
....
收件人:
notBuilder.setSmallIcon(android.R.color.transparent)
....
我以 android.R.color.transparent
为例,因为您对显示任何图标都不感兴趣。但是您可以更改为任何 color/drawable 等等...