2016-11-24 10 views
0

フラグメントを下層のSurfaceViewに追加するにはどうすればよいですか?私はフラグメントを下層のSurfaceViewに追加

final GameSurface gs = new GameSurface(this); 
setContentView(gs); 
...私はこれではなく、私はカスタムsurfaceviewへの参照を設定により、このような

setContentView(R.layout.activity_main); 

としてsetContentView内の任意のレイアウトを設定しないことだと思い例外

java.lang.IllegalArgumentException: No view found for id 0x7f0b0050 

を取得します

次に、サーフェイスビューのコールバックオンタッチ(...) - ユーザーがサーフェスをクリックすると、フラグメントがロードされると想定されます。

事前にの
@Override 
public boolean onTouchEvent(MotionEvent event) { 

..... 

     FragmentManager fragmentManager =((Activity)context).getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     ExchangeFragment fragment = new ExchangeFragment(); 
     fragmentTransaction.add(R.id.relLayout, fragment); 
     fragmentTransaction.commit(); 

おかげ

編集:

ませんクラッシュもはやなく、フラグメントが文句を言わないに表示されます。どうして? @Kelevandosのおかげで、別のスタックスレッドである

How to inflate one view with a layout

の答えは、私はカスタムsurfaceViewsコンストラクタにAttributSetを追加するhade。

何が欠けていますか?ここでは、XMLファイルを編集2

<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" 
> 


    <se.brickgame.brickbreaker.GameSurface 

     android:id="@+id/surfaceId" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
    /> 

    <RelativeLayout 

     android:id="@+id/relLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
    > 
    </RelativeLayout> 

です:

私はまた、コード

fragmentManager.executePendingTransactions(); 
System.out.println("FRAGMENT ISADDED = " + fragment.isAdded()); 
System.out.println("FRAGMENT VISIBLE = " + fragment.isVisible()); 
System.out.println("FRAGMENT HIDDEN = " + fragment.isHidden()); 
System.out.println("FRAGMENT ISINLAYOUT = " + fragment.isInLayout()); 

にこれを追加し、次の出力

11-25 16:09:07.957 12155-12155/se.brickgame.brickbreaker ISystem.out: FRAGMENT ISADDED = true 
11-25 16:09:07.957 12155-12155/se.brickgame.brickbreaker I/System.out: FRAGMENT VISIBLE = true 
11-25 16:09:07.957 12155-12155/se.brickgame.brickbreaker I/System.out: FRAGMENT HIDDEN = false 
11-25 16:09:07.957 12155-12155/se.brickgame.brickbreaker I/System.out: FRAGMENT ISINLAYOUT = false 

を得ましただから、そこにいるようだレイアウトにない - それをどのように解釈するのですか?

答えて

1

GameSurfaceには、R.id.relLayoutというIDを持つビューがありません。フラグメントトランザクションには、フラグメントを挿入するコンテナを指定する必要があります。

一つの解決策は、このように、Activityのレイアウトを作成するには、次のようになります。

<RelativeLayout> 
    <GameSurface/> 
    <RelativeLayout/> //This is the Fragment container 
</RelativeLayout> 

はあなたのActivityのコンテンツのレイアウトとして設定し、このようなあなたのGameSurfaceを取得:

​​37

この実際にはレイアウトやビューをAndroidで処理する方法なので、このようにソリューションを再設計した方が最適です。

何らかの理由で/したくない場合はFragmentの部分を別の方法で置き換えることを再考する必要があります。Fragmentは不要です。

+0

ありがとうございますが、断片が表示されません。私は今、それを理解することはできません、編集を参照してください。 – java

+0

この回答は私に多くの助けになりました – java

関連する問題