Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

finish activity from non activity

I am developing an app. I want to call a alert dialog from 1st activity. The alert dialog is written in another class which is a non activity class. The need of application is that the calling activity should finish from alert which is written in non activity class. The code of calling the alert is as below.

Calling the alert from 1st activity:

public class Activity1 extends Activity {
    /** Called when the activity is first created. */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_layout);
    }// End of onCreate.

        /** Back Button. */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            String message = "Do you Want to Exit.";
            Utility.callAlert(message, getApplicationContext());
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }   
}

And the called class having alert dialog is :

public class Utility {
    // callAlert method to display alert, when exception occur.
    public static void callAlert(String message, final Context context){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
        alertDialogBuilder.setTitle("MyApplication.");
        alertDialogBuilder.setMessage(message);
        alertDialogBuilder.setNeutralButton("Ok", new DialogInterface.OnClickListener() {                   

            public void onClick(DialogInterface dialog, int which) {
                ((Activity1)context.getApplicationContext()).finish();
            } //end onClick.
        }); // end alertDialog.setButton.
        alertDialogBuilder.show();  
    }
}

But this gives me the error as :

02-25 17:00:45.961: D/AndroidRuntime(444): Shutting down VM
02-25 17:00:45.961: W/dalvikvm(444): threadid=1: thread exiting with uncaught exception (group=0x40015560)
02-25 17:00:45.971: E/AndroidRuntime(444): FATAL EXCEPTION: main
02-25 17:00:45.971: E/AndroidRuntime(444): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.view.ViewRoot.setView(ViewRoot.java:531)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.app.Dialog.show(Dialog.java:241)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
02-25 17:00:45.971: E/AndroidRuntime(444):  at com.xxx.myapp.specialclasses.Utility.callAlert(Utility.java:25)
02-25 17:00:45.971: E/AndroidRuntime(444):  at com.xxx.myapp.activities.Activity1.onKeyDown(Activity1.java:149)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.view.KeyEvent.dispatch(KeyEvent.java:1256)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.app.Activity.dispatchKeyEvent(Activity.java:2078)
02-25 17:00:45.971: E/AndroidRuntime(444):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1663)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2560)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2535)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1867)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.os.Looper.loop(Looper.java:123)
02-25 17:00:45.971: E/AndroidRuntime(444):  at android.app.ActivityThread.main(ActivityThread.java:3683)
02-25 17:00:45.971: E/AndroidRuntime(444):  at java.lang.reflect.Method.invokeNative(Native Method)
02-25 17:00:45.971: E/AndroidRuntime(444):  at java.lang.reflect.Method.invoke(Method.java:507)
02-25 17:00:45.971: E/AndroidRuntime(444):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-25 17:00:45.971: E/AndroidRuntime(444):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-25 17:00:45.971: E/AndroidRuntime(444):  at dalvik.system.NativeStart.main(Native Method)
02-25 17:05:46.061: I/Process(444): Sending signal. PID: 444 SIG: 9
like image 246
Manoj Fegde Avatar asked Feb 25 '13 11:02

Manoj Fegde


People also ask

How do you finish an activity?

On Clicking the back button from the New Activity, the finish() method is called and the activity destroys and returns to the home screen.

How do I know if my activity is finished?

Using activity. isFinishing() is the right one solution. it return true if activity is finished so before creating dialog check for the condition.


2 Answers

instead of:

Utility.callAlert(message, getApplicationContext());

use:

Utility.callAlert(message, Activity1.this);

and

public void onClick(DialogInterface dialog, int which) {
                ((Activity)context).finish();
}
like image 185
Archie.bpgc Avatar answered Sep 20 '22 20:09

Archie.bpgc


try this:

public class Utility {
  // callAlert method to display alert, when exception occur.
  public static void callAlert(String message, final Activity activity){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity);
    alertDialogBuilder.setTitle("MyApplication.");
    alertDialogBuilder.setMessage(message);
    alertDialogBuilder.setNeutralButton("Ok", new DialogInterface.OnClickListener() {                   

        public void onClick(DialogInterface dialog, int which) {
            activity.finish();
        } //end onClick.
    }); // end alertDialog.setButton.
    alertDialogBuilder.show();  
  }
}
like image 22
KunalK Avatar answered Sep 19 '22 20:09

KunalK