我有一个抽屉式导航栏,如果用户单击抽屉式导航栏项目,他将返回主屏幕。
但是,如果主屏幕已处于 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/