Java 脱上下文转换活动

Java 脱上下文转换活动,java,android,Java,Android,我有一个班级活动 public class NavActivity extends Activity implements OnItemLongClickListener { .... } 在另一个类的函数中,我有以下代码: LocalActivityManager activityManager = this.getLocalActivityManager(); Window window = activityManager.startActivity(tag, intent

我有一个班级活动

public class NavActivity extends Activity implements OnItemLongClickListener {
....
}
在另一个类的函数中,我有以下代码:

    LocalActivityManager activityManager = this.getLocalActivityManager();
    Window window = activityManager.startActivity(tag, intent);

    final View view = window.getDecorView();
    Context decorContext = view.getContext();

    NavActivity nextActivity;
    nextActivity = (NavActivity)decorContext;
在以前的Android版本中,一切都运行良好。但是在安卓7.0中。它在此行停止并显示以下错误:

原因:java.lang.ClassCastException:com.android.internal.policy.DecorContext无法强制转换为xxxxx.nav.NavActivity


不明白为什么在Android 7.0中,从DecorContext转换到Activity不再有效。

因为在视图上调用getContext不能保证返回Activity,它会返回一个上下文。有时,从xml初始化的视图在WrappedContext中传递,WrappedContext是一种包装另一个上下文并重写某些值的上下文。假设一个上下文将是一个活动是不安全的。如果它在之前工作过,那么你就幸运了——我已经看到这种故障一直到至少4.x。对于这个具体的例子,我找到了以下解决方案:

我通过以下方式接收所需的活动:

nextActivity = (NavActivity)activityManager.getCurrentActivity();
但在我的项目中,我无论如何都需要从活动中接收正确的视图,然后再从活动中接收视图

以前,getDecorView工作得很好:

View view = activity.getWindow().getDecorView();
返回:

Activity activity = (Activity) view.getContext();

但在安卓7(牛轧糖)中,DecorView不再知道它与哪些活动相关。现在还不清楚该怎么办。

你很少需要通过活动,通常连接就足够了。如果确实如此,请显式地传递它,而不是假设上下文是它。您可以参考此页面: