DecorContext演员活动

时间:2017-01-23 00:56:55

标签: java android

我有一个NavActivity类

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版本中,一切运行良好。但在Android 7.0中。它在此行停止并显示以下错误:

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

不清楚为什么从DecorContext转换为Activity在Android 7.0中不再有效。

2 个答案:

答案 0 :(得分:1)

对于这个具体的例子,我找到了以下解决方案:

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

nextActivity = (NavActivity)activityManager.getCurrentActivity();

但是在我的项目中,无论如何我需要从Activity接收正确的View,然后从Activity返回View。

以前,getDecorView运行良好:

View view = activity.getWindow().getDecorView();

然后回来:

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

但是在Android 7(Nougat)中,DecorView不再知道它与哪个Activity有关。目前还不清楚该怎么做。

答案 1 :(得分:0)

因为无法确保在View上调用getContext返回Activity,所以它返回Context。有时,从xml初始化的视图在WrappedContext-一个Context中传递,该Context包装另一个上下文并覆盖某些值。假设Context是一个Activity是永远不安全的。如果它在那之前工作你很幸运 - 我已经看到这种失败一直到至少4.x