我不明白为什么我会得到NPE ...... 这是我的代码:
public void showSettingsAlert(){
AlertDialog.Builder alertdialog = new AlertDialog.Builder(mcontext);
alertdialog.setTitle("Oups ! pas de données GPS");
alertdialog.setMessage("GPS n'est pas activé sur votre appareil, voulez vous l'activer ?");
/*
handling the buttons :
*/
alertdialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mcontext.startActivity(intent);
}
});
// on pressing cancel button
alertdialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
Dialog d = alertdialog.show();
int dividerId = d.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
int textViewId = d.getContext().getResources().getIdentifier("android:id/alertTitle", null, null);
View divider = d.findViewById(dividerId);
// the next line is where i get the NPE :
divider.setBackgroundColor(getResources().getColor(R.color.main_green));
TextView tv = (TextView) d.findViewById(textViewId);
tv.setTextColor(getResources().getColor(R.color.main_green));
alertdialog.show();
}
感谢您的帮助:)
PS:颜色main_green确实存在,我已经在其他地方使用它并且有效。
答案 0 :(得分:0)
如果我没错,你应该在这里使用AlertDialog而不是Dialog:
Dialog d = alertdialog.show(); //Use AlertDialog instead
此外,您无需在方法结束时再次致电show();
修改强>
我刚看到第一次阅读你的代码时错过了一些东西。请替换这个:
AlertDialog d = alertdialog.show();
int dividerId = d.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
int textViewId = d.getContext().getResources().getIdentifier("android:id/alertTitle", null, null);
View divider = d.findViewById(dividerId);
用这个:
AlertDialog d = alertdialog.show();
int dividerId = mcontext.getResources().getIdentifier("android:id/titleDivider", null, null);
int textViewId = mcontext.getResources().getIdentifier("android:id/alertTitle", null, null);
View divider = d.findViewById(dividerId);
dividerId为null,因为您提供错误的Context
来获取值。或者,如果您的代码位于Activity
内,则可以删除mcontext部分并执行:
getResources().getIdentifier()... etc