目前我有一个扩展Activity的类,内部类(“GameView”)扩展了SurfaceView(并实现了Runnable)
public class GameSurface extends Activity implements OnTouchListener
和
public class GameView extends SurfaceView implements Runnable
一切正常,但我决定在View中添加一些按钮,而不是绘制位图,而是使用FrameLayout并将按钮作为ImageButtons加载到Canvas顶部。
所以我尝试通过XML加载GameView,如下所示:
game_layout.xml
<view
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.appname.game.GameSurface$GameView" >
</view>
所以现在我创建了一个扩展Activity的新类并且做了
setContentView(R.layout.gamescreen);
虽然没有工作。我得到一些错误/异常
Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class com.appname.game.GameSurface$GameView
和
Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
所以我在NoSuchMethodException上发现了一些关于StackOverflow的问题,并发现最后一个错误与缺少或不可用的构造函数有关。 构造函数都在那里,包括错误中提到的那个。
public GameView(Context context, AttributeSet attributeSet){
super(context, attributeSet);
//bunch of code
}
所以我假设构造函数不可访问,其他答案提到我应该使构造函数静态。问题是代码现在对非静态方法和字段进行静态引用,这是不可能的,并导致很多错误。
如果不做太多改动,我能做些什么是最好的? 如果需要更多信息以获得更清晰的视图,我非常乐意提供它。感谢
更新: 堆栈跟踪 http://pastebin.com/ZtZQUv7B
答案 0 :(得分:1)
内部类需要是静态的。我无法看到它周围。您需要根据需要使用接口进行足够的重构。 class="com.appname.game.GameSurface$GameView"
将搜索并创建一个由属性值定义的类,而无需关心或了解实例化的类。