2012-11-07 59 views
2

我一直在閱讀很多類似的問題,試圖找到解決方案,但沒有運氣。運行時InflateException當試圖在xml佈局中使用自定義視圖

MainActivity.java

public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.game); 
} 

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" > 
<View 
    android:id="@+id/adView" 
    android:background="@drawable/ad" 
    android:layout_width="320dp" 
    android:layout_height="50dp" 
    /> 

<my.package.MainGamePanel 
    android:id="@+id/gameView"   
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> </RelativeLayout> 

MainGamePanel.java

public class MainGamePanel extends SurfaceView implements SurfaceHolder.Callback { 

private MainThread thread; 

public MainGamePanel(Context context, AttributeSet a) { 
    super(context, a); 
    View.inflate(context, R.layout.game, null); 
    onFinishInflate(); 
    thread = new MainThread(getHolder(), this); 
    setFocusable(true); 
    thread.setRunning(true); 

等等,等等

然後外MainGamePanel構造是功能:

@Override 
protected void onFinishInflate() { 
    getHolder().addCallback(this); 
} 

還有一個MainThread.java文件,但我不認爲這是問題。

這是運行時異常:

java.lang.RuntimeException: Unable to start activity ComponentInfo{my.package/my.package.MainActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class my.package.MainGamePanel 

如果我在MainActivity改變setContentViewsetContentView(new MainGamePanel(this))並從構造中刪除AttributeSet參數,並刪除View.Inflate(context, R.layout.game, null);,那麼它的工作原理,但我想弄清楚如何在xml文件中使用自定義視圖。

+0

它看起來像是循環膨脹佈局。您在R.layout.game上設置了內容視圖,其中包含一個MainGamePanel,其中包含一個MainGamePanel等可能不是問題的R.layout.game,它膨脹了,但這是一個問題 – toadzky

+0

謝謝!我移動了View.inflate(context,R.layout.game,null);插入MainActivity中,緊跟在setContentView之後,因此它只會被調用一次,並且現在可以工作。非常感謝你。 – user1807307

+0

我會將其移動到一個答案,所以你可以接受它 – toadzky

回答

1

它看起來像是循環膨脹佈局。你在R.layout.game上設置了內容視圖,其中包含一個MainGamePanel,它使包含MainGamePanel的R.layout.game膨脹,等等。

你應該將View.inflate行帶出onCreate方法。就我所知,它無論如何都沒有做任何事情。你也不應該明確地致電onFinishInflate。當MainGamePanel實例的通貨膨脹實際完成時,它會自動調用。

+0

有同樣的問題,謝謝。 –