Causato da: android.vista.InflateException: Binary file XML linea #18: Errore di gonfiaggio classe frammento

Sto per creare un frammento Mobile e sta attualmente cercando di ottenere Maps API V2 di lavoro. Sono venuto finora in modo che la mappa è visualizzata nell’applicazione, tuttavia, non posso usare le altre funzioni incluse nel codice (ad esempio lo zoom).

Il codice funziona alla grande se prendo commento di distanza:

mappa = ((SupportMapFragment)getFragmentManager().findFragmentById(R. id.le mappe)).getMap();

    //Bestämmer närhet på kameran
    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_GOOGLE, 14);
    //Uppdaterar "kameran"
    map.animateCamera(update);
    //Sätter maptyp (Satellite-view)
    map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
    //Sätter markering med en liten titel 
    map.addMarker(new MarkerOptions().position(LOCATION_GOOGLE).title("Google Inc"));

MapsFragment

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import android.support.v4.app.Fragment;

public class MapsFragment extends Fragment{

    //Skapar en variabel för position
    private final LatLng LOCATION_GOOGLE = new LatLng(40.7406578, -74.0020894);
    //Skapar objekt
    private GoogleMap map;


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View view = inflater.inflate(R.layout.maps, container, false); 

        map = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.maps)).getMap();

        //Bestämmer närhet på kameran
        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_GOOGLE, 14);
        //Uppdaterar "kameran"
        map.animateCamera(update);
        //Sätter maptyp (Satellite-view)
        map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
        //Sätter markering med en liten titel 
        map.addMarker(new MarkerOptions().position(LOCATION_GOOGLE).title("Google Inc"));

        return view;
    }
}

maps.xml

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:name="com.google.android.gms.maps.MapFragment"/>

Attività Principale

 import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends FragmentActivity {

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

        buildList();
    }

    public void buildList(){
        String[] menuItems = {"Om Google", "Om Android", "Hitta oss", "Kontakta oss"};

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.menu_items, menuItems);

        ListView list = (ListView)findViewById(R.id.menuList);
        list.setAdapter(adapter);
    }


}

Attività principale

    <LinearLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/menuList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2" >
    </ListView>

       <fragment
           android:id="@+id/maps"
           android:name="com.raj.fragment.MapsFragment"
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_weight="2" />

</LinearLayout>

ERRORE

01-02 13:28:25.657: E/AndroidRuntime(31071): FATAL EXCEPTION: main
01-02 13:28:25.657: E/AndroidRuntime(31071): Process: com.raj.fragment, PID: 31071
01-02 13:28:25.657: E/AndroidRuntime(31071): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.raj.fragment/com.raj.fragment.MainActivity}: android.view.InflateException: Binary XML file line #18: Error inflating class fragment
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2248)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.app.ActivityThread.access$800(ActivityThread.java:138)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.os.Handler.dispatchMessage(Handler.java:102)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.os.Looper.loop(Looper.java:136)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.app.ActivityThread.main(ActivityThread.java:5050)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at java.lang.reflect.Method.invokeNative(Native Method)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at java.lang.reflect.Method.invoke(Method.java:515)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1264)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1080)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at dalvik.system.NativeStart.main(Native Method)
01-02 13:28:25.657: E/AndroidRuntime(31071): Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class fragment
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.app.Activity.setContentView(Activity.java:1929)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at com.raj.fragment.MainActivity.onCreate(MainActivity.java:13)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.app.Activity.performCreate(Activity.java:5231)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
01-02 13:28:25.657: E/AndroidRuntime(31071):    ... 11 more
01-02 13:28:25.657: E/AndroidRuntime(31071): Caused by: java.lang.ClassCastException: com.raj.fragment.MapsFragment cannot be cast to com.google.android.gms.maps.SupportMapFragment
01-02 13:28:25.657: E/AndroidRuntime(31071):    at com.raj.fragment.MapsFragment.onCreateView(MapsFragment.java:29)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:900)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1184)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:291)
01-02 13:28:25.657: E/AndroidRuntime(31071):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
01-02 13:28:25.657: E/AndroidRuntime(31071):    ... 21 more
InformationsquelleAutor user2734182 | 2014-01-02



2 Replies
  1. 2

    La classe estende FragmentActivity

    e hai

    map = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.maps)).getMap();

    Cambiare questo

     android:name="com.google.android.gms.maps.MapFragment"/>

    per

    android:name="com.google.android.gms.maps.SupportMapFragment"/>
    • Ho preso “Il metodo getSupportFragmentManager() è definito per il tipo di MapsFragment”
    • che cosa succede se si utilizza getFragmentManager(). funziona quindi
    • Quando ho eseguito con getFragmentManager, ottengo errore “Caused by: java.lang.ClassCastException: com.raj.frammento.MapsFragment non può essere gettato com.google.android.gms.mappe.SupportMapFragment”
    • hai fatto le modifiche di cui al mio post
    • utilizzare getActivity().getSupportFragmentManager();
    • Mi dispiace. Avevo dimenticato il punto. .getSupportFragmentManager() funziona bene. Ora Eclipse lamentano SupportMapFragment: “SupportMapFragment non può essere risolto con una variabile”. Il codice è lo stesso a parte il getActivity-line e android.nome in XML
    • provare questo MapView mapview = (MapView) getActivity().findViewById(R.id.maps); GoogleMap map = mapview.getMap();
    • cerchiamo di continuare questa discussione in chat
    • a causa di utilizzo di frammento;nella mia attività ho scritto una finestra di dialogo all’interno della finestra di dialogo ho messo la visualizzazione della mappa..la sua non mostrare se io uso come attività..quindi voglio cambiare un’attività nel frammento che anche il suo una scheda di vista.quindi, prima di scheda frammento di classe estende frammento visualizza correttamente,ma andando in seconda classe si estende frammenti dà errore

  2. -3

    Provare ad aggiungere alcuni costruttori di MapsFragment e funzionerà.

    public MapsFragment(Context ctx, AttributeSet attrs, int def) {
        super(ctx, attrs, def);
    }
    
    public MapsFragment(Context ctx, AttributeSet attrs) {
        this(ctx, attrs, 0);
    }
    
    public MapsFragment(Context ctx) {
        this(ctx, null, 0);
    }
    • questo è totalmente sbagliato. frammento dovrebbe avere arg costruttore

Lascia un commento