Reputation: 2340
I have an issue in dissmissing the alertdialog box which is customized. That is it is having a customized view that contains two buttons one is for db operation and other for loading another activity.I want to dissmiss the dialog box after the db action performed. But now i cant declare any command like dialog.dismiss()
or cancel()
or finish()
please somebody help me to fix this.
My Class
@Override
protected boolean onTap(int index) {
OverlayItem item = mapOverlays.get(index);
final String title= item.getTitle();
final String snippet= item.getSnippet();
AlertDialog.Builder dialog = new AlertDialog.Builder(this.context);
if(title.equalsIgnoreCase("Your Location")){
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
}
else if(title.equalsIgnoreCase("")){
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.VERTICAL);
final Button park_button = new Button(context);
park_button.setHint("Park here");
// park_button.setBackgroundResource();
layout.addView(park_button);
park_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("parkbutton:Clicked");
// Delete DB Values
int count = db.getDatasCount();
for(int i = 0;i<count;i++){
db.deleteValues(i);
}
//latitude & longtitude (string)
String latitude = String.valueOf(lat);
String longtitude = String.valueOf(lon);
Log.d("Insert: ", "Inserting ..");
db.addData(new Datas(latitude, longtitude));
// Toast.makeText(context, "Lat: " + lat + ", Lon: "+lon, Toast.LENGTH_SHORT).show();
// Reading DB Data
Log.d("Reading: ", "Reading all Values...");
List<Datas> datas = db.getAllDatas();
for (Datas dat : datas) {
String log = "Id: "+dat.getID()+" ,Latitude: " + dat.getlat() + " ,Longtitude: " + dat.getlon();
// Writing DB data to log
Log.d("DB Data: ", log);
}
Intent f = new Intent(context,MainTabActivity.class);
context.startActivity(f);
}
});
final Button know_more_button = new Button(context);
know_more_button.setHint("Know more");
// park_button.setBackgroundResource();
layout.addView(know_more_button);
know_more_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SharedPreferences prefs = context.getSharedPreferences("myprefs", 0);
SharedPreferences.Editor editor =prefs.edit();
editor.putString("KEY_REFERENCE", snippet);
editor.commit();
Intent intent = new Intent(context, SinglePlaceActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
dialog.setView(layout);
dialog.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
}
dialog.show();
return true;
}
public void addOverlay(OverlayItem overlay) {
mapOverlays.add(overlay);
}
public void populateNow(){
this.populate();
}
}
Upvotes: 2
Views: 4538
Reputation: 859
I had the same issue. Add .create when creating AlertDialog Builder.
val dialogBuilder = AlertDialog.Builder(requireContext()).create()
Once this is done. dismiss() function is exposed with dialogBuilder
Upvotes: 0
Reputation: 101
First off, to explain how to get the behavior you want, I'll need you to rename your AlertDialog.Builder instance, currently named dialog, to builder. It's not accurately named and will help you understand my approach to solving your problem. So this line:
AlertDialog.Builder dialog = new AlertDialog.Builder(this.context);
would turn into:
AlertDialog.Builder builder = new AlertDialog.Builder(this.context);
From there, you'll need to:
See code below:
// ... original code here (right before the end of your onTap main method)
final AlertDialog dialog = builder.show(); // this line used to be "dialog.show();"
know_more_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ... original code here
dialog.dismiss();
}
});
// ... for the other button, do the same
return true;
Upvotes: 4
Reputation: 10313
Try to extend DialogFragment if it is acceptable (you need to extend your activity from FragmentActivity).
public static class Dialog extends DialogFragment {
@Override
public android.app.Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder b = new AlertDialog.Builder(getActivity());
Button btn = new Button(getActivity());
btn.setText("dismiss");
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
b.setView(btn);
b.setPositiveButton("OK", null);
return b.create();
}
}
You can show dialog in this way (android.support.v4 is used):
new Dialog().show(getSupportFragmentManager(), "dialog");
Also you need establish communication between dialog and activity.
Upvotes: 1
Reputation: 12444
do this
final AlertDialog.Builder dialog = new AlertDialog.Builder(this.context);
not
AlertDialog.Builder dialog = new AlertDialog.Builder(this.context);
Upvotes: 0