Reputation: 1945
I have made a layout for my alertdialog and there I have a exit button that calls dialog.dismiss()
and a few more that save data to preferences. I have set onClickListeners to all and my dialog does not have any button such as positive or negative, only the ones in the layout.
However the app crashes when calling the dialog.
08-20 07:58:01.291: E/AndroidRuntime(3297): FATAL EXCEPTION: main 08-20 07:58:01.291: E/AndroidRuntime(3297): java.lang.NullPointerException 08-20 07:58:01.291: E/AndroidRuntime(3297): at com.xcommerce.androidstore.HomeScreen$21.onClick(HomeScreen.java:1183) 08-20 07:58:01.291: E/AndroidRuntime(3297): at android.view.View.performClick(View.java:4202) 08-20 07:58:01.291: E/AndroidRuntime(3297): at android.view.View$PerformClick.run(View.java:17340) 08-20 07:58:01.291: E/AndroidRuntime(3297): at android.os.Handler.handleCallback(Handler.java:725) 08-20 07:58:01.291: E/AndroidRuntime(3297): at android.os.Handler.dispatchMessage(Handler.java:92) 08-20 07:58:01.291: E/AndroidRuntime(3297): at android.os.Looper.loop(Looper.java:137) 08-20 07:58:01.291: E/AndroidRuntime(3297): at android.app.ActivityThread.main(ActivityThread.java:5039) 08-20 07:58:01.291: E/AndroidRuntime(3297): at java.lang.reflect.Method.invokeNative(Native Method) 08-20 07:58:01.291: E/AndroidRuntime(3297): at java.lang.reflect.Method.invoke(Method.java:511) 08-20 07:58:01.291: E/AndroidRuntime(3297): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 08-20 07:58:01.291: E/AndroidRuntime(3297): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 08-20 07:58:01.291: E/AndroidRuntime(3297): at dalvik.system.NativeStart.main(Native Method)
TextView sort = (TextView) findViewById(R.id.sorteaza);
final Dialog sortDialog = new Dialog(this, R.style.DialogTheme);
sort.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
LayoutInflater inflater = HomeScreen.this.getLayoutInflater();
View sortView = inflater.inflate(R.layout.sort_layout, null);
sortDialog.setContentView(sortView);
WindowManager manager = (WindowManager) getSystemService(Activity.WINDOW_SERVICE);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(sortDialog.getWindow().getAttributes());
lp.width = manager.getDefaultDisplay().getWidth();
lp.height = manager.getDefaultDisplay().getHeight() - manager.getDefaultDisplay().getHeight()/5;
sortDialog.getWindow().setAttributes(lp);
sortDialog.show();
//sort controls
SharedPreferences sortPref = getSharedPreferences("SORT", 0);
final SharedPreferences.Editor ed = sortPref.edit();
Button exitSort, sortAZ, sortZA, sortCheap, sortExpensive;
exitSort = (Button) findViewById(R.id.exitSort);
sortAZ = (Button) findViewById(R.id.sortAZ);
sortZA = (Button) findViewById(R.id.sortZA);
sortCheap = (Button) findViewById(R.id.sortCheap);
sortExpensive = (Button) findViewById(R.id.sortExpensive);
exitSort.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
sortDialog.dismiss();
}
});
sortAZ.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ed.putString("sort", "AZ");
ed.commit();
}
});
sortZA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ed.putString("sort", "ZA");
ed.commit();
}
});
sortCheap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ed.putString("sort", "cheap");
ed.commit();
}
});
sortExpensive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ed.putString("sort", "expensive");
ed.commit();
}
});
}
});
Upvotes: 4
Views: 2941
Reputation: 5374
your problem at line: sortDialog.dismiss();
the "
sortDialog"
is a DialogBuilder
object, it's not a Dialog
object
.
So you need a variable to handle the dialog when call show()
function.
ex:
final Dialog dg = sortDialog.show();
and close dialog by "dg":
dg.dismiss();
Upvotes: 1
Reputation: 133560
You need to use the dialog object to initialize views. As suggested by Luksprog.
You inflate a custom view and set the same to the dialog. You have buttons in the layout you inflate. So use the dialog object to initialize your buttons.
exitSort = (Button) sortDialog.findViewById(R.id.exitSort);
sortAZ = (Button) sortDialog.findViewById(R.id.sortAZ);
sortZA = (Button) sortDialog.findViewById(R.id.sortZA);
sortCheap = (Button) sortDialog.findViewById(R.id.sortCheap);
sortExpensive = (Button) sortDialog.findViewById(R.id.sortExpensive);
Upvotes: 3