2017-08-23 1 views
0

J'ai un tiroir de navigation, et si un utilisateur clique sur l'élément du tiroir de navigation, il retournera à l'écran d'accueil. Cependant, si l'écran d'accueil est déjà actif, je ne souhaite pas créer une activité en double avec une intention. J'essaie essentiellement de vérifier si l'activité est déjà active/dans le backstack, car je ne veux pas utiliser les ressources de manière inefficace.Impossible de vérifier l'activité en cours à partir de DrawerLayout Élément

mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      switch (i){ 
       case 0: 
        Toast.makeText(getApplicationContext(),"CLICKED 0",Toast.LENGTH_SHORT).show(); 
        Log.v("DRAWER", "THE DRAWER HAS BEEN CLICKED"); 
        if (getCallingActivity() == HomeActivity){ 
         onBackPressed(); 
        } else { 
         Intent I = new Intent(); 
        } 
        break; 
+0

Salut tccpg288! Vous pouvez vérifier ma réponse. – KeLiuyue

Répondre

1

Essayez ceci.

obtenir l'activité actuelle

// get current activity 
public static Activity getCurrentActivity() { 
    try { 
     Class activityThreadClass = Class.forName("android.app.ActivityThread"); 
     Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(
       null); 
     Field activitiesField = activityThreadClass.getDeclaredField("mActivities"); 
     activitiesField.setAccessible(true); 
     Map activities = (Map) activitiesField.get(activityThread); 
     for (Object activityRecord : activities.values()) { 
      Class activityRecordClass = activityRecord.getClass(); 
      Field pausedField = activityRecordClass.getDeclaredField("paused"); 
      pausedField.setAccessible(true); 
      if (!pausedField.getBoolean(activityRecord)) { 
       Field activityField = activityRecordClass.getDeclaredField("activity"); 
       activityField.setAccessible(true); 
       Activity activity = (Activity) activityField.get(activityRecord); 
       return activity; 
      } 
     } 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } catch (NoSuchFieldException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

Puis

changer votre code à ce

if (getCurrentActivity() instanceof HomeActivity) { 
    onBackPressed(); 
} else { 
    Intent I = new Intent(); 
}