фрагментарная активность с пользовательским представлением поверхности

Я программирую игру для Android и поэтому использую класс, расширяющий представление о поверхности.

Моя активность выглядит так:

public class GameActivity extends FragmentActivity {

private Fragment fragEnd;

private GameView gameView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    gameView = new GameView(this);

    setContentView(gameView);


    fragEnd = (FragmentEnd) Fragment.instantiate(this, FragmentEnd.class.getName(), null);

    FragmentTransaction ft = getFragmentManager().beginTransaction();

    ft.add( WHAR COMES IN HERE??? , fragEnd);
    ft.commit();

}
...

Класс GameView расширяет представление поверхности. Мой файл макета activity_game.xml выглядит так:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".GameActivity" 
    android:id="@+id/myView">

</RelativeLayout>

Так что в моем xml нет ничего особенного. Теперь я хочу использовать фрагменты в игре для опций и т. Д. Я прочитал несколько руководств и добавил компоненты в свою (фрагмент) активность. Но я получаю исключение IllegalArgumentException: «представление не найдено» при попытке создать фрагмент. я знаю, что проблема в том, что текущий вид (Surfaceview) не может быть найден. в учебниках они работали только с XML-файлами макета, например, писали:

setContentView(R.layout.activity_main);

А затем получите компонент (например, идентификатор Relativelayout "relativeLayoutView") Activity_main, чтобы определить

ft.add( R.id.relativeLayoutView , fragEnd);

Но в моем случае в my activity_main ничего нет, потому что все происходит в классе gameView. Как мне решить эту проблему для отображения фрагментов?


person Jim Panse    schedule 26.03.2014    source источник


Ответы (1)


Создайте подобный макет и установите его для действия. Также добавьте интерфейс в GameView и реализуйте интерфейс в действии. когда вы показываете что-то во фрагменте, вызовите метод интерфейса из GameView и добавьте фрагмент в действие, используя R.id.container или другой подход, чтобы показать параметры в виде диалога.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.examples.workapp.app.GameView
    android:id="@+id/gameView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"/>
<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="200dp">
    </FrameLayout>
 </LinearLayout>
person Libin    schedule 27.03.2014