2011-03-21 12 views

Respuesta

178

sí, con un elenco:

((Activity) ctx).finish(); 
+2

Solo si es la actividad actual; de lo contrario, la actividad no actual se terminará :) – ernazm

+2

Esto podría generar problemas si el 'Contexto' es realmente un contexto de aplicación. – user634618

+1

cómo hacerlo si el contexto es un contexto de aplicación. Estoy ejecutando un subproceso de temporizador en una clase y si el tiempo termina quiero cerrar la actividad actual de esa clase. – Sando

1

Si usted tiene acceso a la vista de funcionamiento de la actividad que desea terminar (por ejemplo, que se encuentran en un detector de clics), se puede hacer:

((Activity)getContext()).finish(); 

(con agradecimiento a 2red13 para conseguirme aquí).

10

En mi caso después trabajaron,

tengo que terminar mi actividad en un AsyncTask onPostExcute().

Donde mi clase AsyncTask es clase pública separada, que tiene un constructor con parámetro de Contexto.

((Activity)(mContext)).finish(); 

Sólo lo anterior trabajó para mí ... De todos modos tengo esta idea de @ 2red13 y @lucy respuestas ... Gracias a todos ...

+0

Esto es ahora forma diferente '((Actividad) mContext) .finish()'. – prakharsingh95

-1

Probar:

((Activity) context.getApplicationContext()).finish(); 
+4

¡No use esta "solución"! No puede adivinar (y probablemente siempre esté equivocado) que su contexto de Aplicación es el mismo que su Actividad. – marciowb

8

sé que es una entrada antigua, pero, tal vez podría ser una buena idea llamar de esta manera:

if(context instanceof Activity){ 
       ((Activity)context).finish(); } 

de esta manera nos aseguramos de que no reciben ningún u ClassCastExceptions nnecesary

1

Si inicia la actividad usando:

startActivityForResult(i, 1); 

puede llamar finishActivity (1) para terminar todas las actividades comenzaron con ese código de solicitud, así:

((Activity)getContext()).finishActivity(1); 

En mi caso Necesito usar uno en un controlador postDelayed. Usando esto, puede estar seguro de qué actividad está terminando. ¡Espero eso ayude!

0

Tuve el mismo problema al cerrar una actividad de preferencia. Aquí es lo que hice:

public class T2DPreferenceActivity extends PreferenceActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
      getFragmentManager().beginTransaction().replace(android.R.id.content, 
       new T2DPreferenceFragment()).commit(); 
    } 

    public static class T2DPreferenceFragment extends PreferenceFragment { 
     @Override 
     public void onCreate(final Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.server_screen_preference); 
      Preference testServicePreference = getPreferenceScreen().findPreference("PREFERRED SERVER"); 
      testServicePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
       @Override 
       public boolean onPreferenceChange(Preference preference, Object newValue) { 
        T2DPreferenceActivity.closeActivity(getActivity()); 
        return true; //returning true still makes the activity handle the change to preferences 
       } 
      }); 
     } 

     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
      super.onViewCreated(view, savedInstanceState); 
      ListView lv = (ListView)view.findViewById(android.R.id.list); 
      ViewGroup parent = (ViewGroup)lv.getParent(); 
      parent.setPadding(0, 100, 0, 0); 
     } 
    } 

    protected static void closeActivity(Activity activity) { 
     activity.finish(); 
    } 
} 
Cuestiones relacionadas