Как вставить пользовательский вид в XML LinearLayout - PullRequest
0 голосов
/ 31 мая 2011

Итак, у меня есть CustomView, который расширен с View. И у меня есть линейный макет из 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 Как мне сделать так, чтобы мой CustomView (GameThread в этом примере) мог вставляться в xml?

Ответы [ 3 ]

0 голосов
/ 14 ноября 2011

Я не знаю, что такое Jembalang, но я думаю, вы должны удалить это.

gameView = (GameThread) findViewById(R.id.game_view);
0 голосов
/ 04 сентября 2013

Вы говорите, что ваш файл макета называется " example.xml ", но вы вызываете setContentView (R.layout. cobagabung ) . Таким образом, ваше представление инициализируется из " cobagabung.xml ".

Убедитесь, что вы используете один и тот же идентификатор для имени файла макета и вызова setContentView, например

setContentView(R.layout.example);
0 голосов
/ 31 мая 2011

Ваша строка должна выглядеть так:

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

вы передаете идентификатор макета, а не идентификатор созданного вами представления.

Остальная часть вашего кода выглядит нормально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...