2015-01-15 75 views
1

我實際上是編程使用谷歌地圖API的Android應用程序。獲取充氣ViewGroup與片段的佈局

佈局activity_main.xml中看起來是這樣的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:id="@+id/mapContainer" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       tools:context=".MainActivity" > 

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:map="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/map" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:name="com.google.android.gms.maps.SupportMapFragment" 
      map:mapType="normal" 
      map:uiCompass="false" 
      map:uiRotateGestures="true" 
      map:uiScrollGestures="true" 
      map:uiTiltGestures="true" 
      map:uiZoomControls="false" 
      map:uiZoomGestures="true" /> 
</LinearLayout> 

我在片段異步地加載地圖。當我嘗試膨脹activity_main觀點:

LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
ViewGroup mainView = (ViewGroup) inflater.inflate(R.layout.activity_main, null); 

應用崩潰並返回一個錯誤:

01-15 19:25:16.045: E/AndroidRuntime(21115): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.MainActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class fragment 

我該怎麼解決呢?我需要這個ViewGroup中設置一個電源按鈕的KeyListener到應用程序(類似我在沒有片段另一個應用程序所做的那樣):

mainView.setOnKeyListener(new OnKeyListener() 
    { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) 
     { 
      if(keyCode == KeyEvent.KEYCODE_POWER) 
      { 
       //STUFF 
      } 
     } 
    }); 

謝謝您的幫助:d

+0

看起來你試圖重新發明輪子......錯誤的方式。你需要添加一個監聽器到一個視圖?它是地圖視圖嗎?創建自定義地圖片段並覆蓋'onViewCreated(View,Bundle)'。參數中的視圖是地圖視圖。除非你知道你在做什麼,否則永遠不要使用應用程序上下文中的inflater。 – 2015-01-16 17:44:35

+0

我已經在答案中發佈了另一個代碼,請檢查我現在的問題。 – Skazza 2015-01-16 17:51:47

+0

如何發佈另一個問題呢? – 2015-01-16 18:19:33

回答

0

命名空間必須在聲明第一種觀點

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      xmlns:map="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/mapContainer" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      tools:context=".MainActivity" > 

<fragment 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     map:mapType="normal" 
     map:uiCompass="false" 
     map:uiRotateGestures="true" 
     map:uiScrollGestures="true" 
     map:uiTiltGestures="true" 
     map:uiZoomControls="false" 
     map:uiZoomGestures="true" /> 
</LinearLayout> 
+0

這不能解決我的問題。該應用程序仍然崩潰與相同的錯誤。 – Skazza 2015-01-15 22:36:45

+0

抱歉只是意識到錯誤,你不能膨脹碎片,碎片是由碎片事務處理的,你不能這樣做MyFragment fragment =(MyFragment)mainView.find .... – 2015-01-15 23:03:36

+0

好吧,我該如何處理碎片爲了設置一些關鍵聽衆到應用程序? – Skazza 2015-01-15 23:05:05