0

所以我有一个CustomViewView. 我有一个来自 XML 的线性布局。XML 命名为example

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res/jembalang.comfest.game"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <jembalang.compfest.game.GameThread
    android:id="@+id/game_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
  </jembalang.compfest.game.GameThread>
  <Button 
    android:text="Button" 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content">
  </Button>
</LinearLayout>

以及使用xml的代码

setContentView(R.layout.cobagabung);
gameView = (GameThread) Jembalang.this.findViewById(R.id.game_view);
gameView.setFocusable(true);
gameView.setFocusableInTouchMode(
gameView.start();

如果有帮助,我添加了 GameThread 构造函数

public class GameThread extends View implements Runnable,OnKeyListener{
    public GameThread(Context context,AttributeSet attr){
        super(context, attr);
        ...
    }
    public GameThread(Context context) {
        super(context);
        ...
    }

我认为我这样做的方式有问题,因为findViewById返回null 我应该怎么做才能使我的CustomViewGameThread在这个例子中)能够插入到 xml 中?

4

3 回答 3

0

我不知道是什么Jembalang,但我认为你应该删除它。

gameView = (GameThread) findViewById(R.id.game_view);
于 2011-11-14T18:49:30.830 回答
0

您说您的布局文件名为“ example.xml ”,但您调用setContentView (R.layout.cobagabung )。因此,您的视图是从“ cobagabung.xml ”初始化的。

确保对布局文件名和 setContentView 调用使用相同的标识符,例如

setContentView(R.layout.example);
于 2013-09-04T02:22:51.733 回答
0

你的行应该是:

gameView = (GameThread) Jembalang.this.findViewById(R.id.game_view);

您传递的是布局的 id,而不是您创建的视图的 id。

您的其余代码看起来不错

于 2011-05-31T11:23:20.040 回答