java - 无法从 DrawerLayout 项目检查当前 Activity

标签 java android

我有一个抽屉式导航栏,如果用户单击抽屉式导航栏项目,他将返回主屏幕。

但是,如果主屏幕已处于 Activity 状态,我不想创建具有 Intent 的重复 Activity 。我本质上是想检查 Activity 是否已经处于 Activity 状态/在后台堆栈中,因为我不想低效地利用资源。

 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;

最佳答案

试试这个。

获取当前 Activity

// 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;
}

然后

将代码更改为此

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

关于java - 无法从 DrawerLayout 项目检查当前 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45829637/

相关文章:

android - 如何正确使用Intent

android - 如何在android中的LinkedIn上的墙上发布消息

java - 提取 APK : what are . png@ 文件?

java - 为什么我的时间戳在时区中移动?

java - 将分隔符插入 List<String> 的最优雅方式

java - 无法在 Servlet 应用程序中使用 Thymeleaf 访问请求属性或参数

android - 谷歌使用 firebase 登录时出错

java - Spring 容器实现

Java 开发环境 : Eclipse and NetBeans annoyances : any possible fixes or alternatives?

android - fragment View 通过主视图的 id 查找 View