Android surfaceview не может работать


Это простой вопрос, но я не могу понять его:

Это мой xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android = "http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>

<GG.My_pic.testA
        android:id = "@+id/myview"
        android:layout_width = "fill_parent"
        android:layout_height = "fill_parent"
    />

</FrameLayout>

В лунном спускаемом аппарате основной поток использует

    // tell system to use the layout defined in our XML file
    setContentView(R.layout.lunar_layout);

Но я не могу использовать мой

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

Если я изменю свой R. макет.главное чтобы - > новый тэста(эту) , она работает

(testA-это класс, который расширяет SurfaceView реализует SurfaceHolder.Обратный вызов)

Почему??

1 2

1 ответ:

Я выяснил почему, но не знаю почему.

Будучи настоящим новичком как в java, так и в android, я потратил очень много времени, чтобы выяснить это.

Ключ к этой проблеме -

Класс gameView расширяет SurfaceView реализует SurfaceHolder.Обратный звонок {

public gameView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    // TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub

}

}

Вы можете видеть, что это основа surfaceview, в каждом учебнике

Такие как

Http://android-er.blogspot.com/2010/05/android-surfaceview.html

Http://www.droidnova.com/playing-with-graphics-in-android-part-ii,160.html

В surfaceview есть 3 вида конструкторов:

SurfaceView(Context context)
SurfaceView(Context context, AttributeSet attrs)
SurfaceView(Context context, AttributeSet attrs, int defStyle)

Я провел день, используя первый:

SurfaceView(Context context)
И дело всегда доходит до"силового закрытия". Но когда я обратился ко второму конструктору:
SurfaceView(Context context, AttributeSet attrs)

Это вдруг срабатывает!

Это и есть решение.

Может ли кто-нибудь сказать мне, почему??