我有这样的布局:
<com.mypackage.QuadPaneHorizontalSplit
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- more views here -->
</com.mypackage.QuadPaneHorizontalSplit>
QuadPaneHorizontalSplit类扩展了QuadPaneLayout(扩展了LineraLayout):
public class QuadPaneHorizontalSplit extends QuadPaneLayout {
public QuadPaneHorizontalSplit(Context context) {
super(context);
}
public QuadPaneHorizontalSplit(Context context, AttributeSet attrs) {
super(context, attrs);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public QuadPaneHorizontalSplit(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected boolean isVerticalSplit() {
return false;
}
}
使用setContentView设置布局后,我尝试检索自定义视图:
QuadPaneLayout quadPaneLayout = (QuadPaneLayout) findViewById(R.id.root_layout);
一般来说效果很好,但我得到了一些崩溃报告,但有以下例外:
java.lang.ClassCastException:com.mypackage.QuadPaneHorizontalSplit 无法转换为com.mypackage.QuadPaneLayout
QuadPaneHorizontalSplit显然扩展了QuadPaneLayout,因此不应该有例外。我收到Android 4.x设备和不同制造商的崩溃报告。有趣的是,所有的设备都扎根,所以也许这是一个自定义rom的问题?请注意,这行代码每天执行数千次没有问题,到目前为止我只有13次崩溃(BugSense),但我还是想深究这一点。
我知道这一点:https://stackoverflow.com/a/7823787/534471但是我没有在此布局中使用include,我不想添加合并代码,因为这可能会产生不良影响。
任何人都知道这里发生了什么?
答案 0 :(得分:1)
我终于找到了这个问题的答案,也可能是其他开发人员感兴趣的。
由于我有很多其他无法解释的崩溃,包括VerifyErrors,ClassNotFoundExceptions和ActivityNotFoundExceptions,我对这些崩溃报告的来源产生了怀疑。我添加了一些“额外的代码”,以确保应用程序没有被篡改,如果是错误报告将显示这一点。事实上,所有ClassCastException崩溃都发生在我的应用程序的实例中,这些崩溃显然已经破解,这也解释了为什么我只为应用程序的付费版本获取此崩溃报告,以及为什么付费应用程序似乎比免费应用程序更频繁地崩溃。 / p>
也许是时候花这笔额外的钱购买DexGuard牌照了......
答案 1 :(得分:0)
嗯......有时这种情况发生在我身上,但一旦我清理了项目,通常会解决这个问题。在这种情况下,这似乎是os / device / user特定的。您多久从QuadPaneHorizontalSplit投射到QuadPaneLayout?你是否有另一个“R.id.root_layout”实例,它不是同一个View对象?也许这导致了这个问题?
编辑:没关系,我忘了ClassCastException是专门从QuadPaneHorizontalSplit到QuadPaneLayout,所以它可能不是“R.id.root_layout”的另一个实例。您从BugSense获得了哪些其他信息?