5

Ich habe versucht, eine sehr einfache App mit Material Design zu spielen. Ich versuche, eine Listview (mit der neuen RecyclerView) in jedem Element ist eine Karte mit einem Google Maps Lite darin zu erstellen.Google Map Lite in CardView

habe ich nach diesem Beispiel basicly worden: Creating Lists and Cards, für die Google Maps Implementierung i this example

Jedes Ding „Works“ verwendet haben, wenn ich in den Adapter nur ein Element haben (so gibt es nur einen Punkt zu Anzeige) , aber wenn ich ein zweites Element mit dem Adapter hinzufügen (so sollte es zwei Elemente in der Liste sein) die App stürzt ab, mit Ausnahme:

21158-21158/lollipop.auxilium.nl.lollipoptest E/AndroidRuntime﹕ FATAL EXCEPTION: main 
android.view.InflateException: Binary XML file line #21: Error inflating class fragment 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:719) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
     at lollipop.auxilium.nl.lollipoptest.MyAdapter.onCreateViewHolder(MyAdapter.java:63) 
     at lollipop.auxilium.nl.lollipoptest.MyAdapter.onCreateViewHolder(MyAdapter.java:25) 
     at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:4121) 
     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3431) 
     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3340) 
     at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1810) 
     at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1306) 
     at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1269) 
     at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:523) 
     at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1988) 
     at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2237) 
     at android.view.View.layout(View.java:15204) 
     at android.view.ViewGroup.layout(ViewGroup.java:4793) 
     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) 
     at android.view.View.layout(View.java:15204) 
     at android.view.ViewGroup.layout(ViewGroup.java:4793) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
     at android.view.View.layout(View.java:15204) 
     at android.view.ViewGroup.layout(ViewGroup.java:4793) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
     at android.view.View.layout(View.java:15204) 
     at android.view.ViewGroup.layout(ViewGroup.java:4793) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
     at android.view.View.layout(View.java:15204) 
     at android.view.ViewGroup.layout(ViewGroup.java:4793) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 
     at android.view.View.layout(View.java:15204) 
     at android.view.ViewGroup.layout(ViewGroup.java:4793) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
     at android.view.View.layout(View.java:15204) 
     at android.view.ViewGroup.layout(ViewGroup.java:4793) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 
     at android.view.View.layout(View.java:15204) 
     at android.view.ViewGroup.layout(ViewGroup.java:4793) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
     at android.view.View.layout(View.java:15204) 
     at android.view.ViewGroup.layout(ViewGroup.java:4793) 
     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2260) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2007) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1249) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6364) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:591) 
     at android.view.Choreographer.doFrame(Choreographer.java:561) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777) 
     at android.os.Handler.handleCallback(Handler.java:730) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:176) 
     at android.app.ActivityThread.main(ActivityThread.java:5419) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang. 

kann jemand mir sagen, was ich falsch mache?

neben dem Fehler kann ich nicht herausfinden, was wäre der beste Weg, Eigenschaften auf den einzelnen Karten (Center und so) zu setzen. Hilfe in diesem Bereich wäre auch sehr geschätzt.

Implementation als Referenz:

Aktivität

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

     mRecyclerView = (RecyclerView) rootView.findViewById(R.id.main_recycler_view); 

     mLayoutManager = new LinearLayoutManager(context); 
     mRecyclerView.setLayoutManager(mLayoutManager); 

     ArrayList<String> data = new ArrayList<>(); 
     data.add("Toeter"); 

     mAdapter = new MyAdapter(data, getChildFragmentManager()); 
     mRecyclerView.setAdapter(mAdapter); 

     return rootView; 
    } 

MyAdapter

@Override 
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    final View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.card, parent, false); 

    ViewHolder vh = new ViewHolder(v); 
    return vh; 
} 

ViewHolder

public static class ViewHolder extends RecyclerView.ViewHolder { 
    public ViewHolder(View v) { 
     super(v); 
    } 
} 
+0

Konnten Sie den vollen stacktrace zur Verfügung stellen? – rciovati

+0

Aktualisiert die Frage mit dem kompletten Stacktrace – LordSauron

Antwort

13

Versuchen MapView statt MapFragment mit:

item.xml:

<android.support.v7.widget.CardView 
     android:id="@+id/card_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:cardCornerRadius="4dp"> 

     <com.google.android.gms.maps.MapView 
       android:id="@+id/map_view" 
       android:layout_width="match_parent" 
       android:layout_height="148dp" 

       app:liteMode="true" 
       app:mapType="normal" /> 

</android.support.v7.widget.CardView> 

RecyclerAdapter.java:

public ViewHolder(View itemView) { 
    super(itemView); 

    mapView = (MapView) itemView.findViewById(R.id.map_view); 
} 


@Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 

       holder.mapView.onCreate(null); 
       holder.mapView.getMapAsync(this); 

} 

Denken Sie daran, OnMapReadyCallback in RecyclerView.Adapter zu implementieren.

Simone

+0

Ich habe das versucht, und zwar gibt es zwei Raster angezeigt, aber es ist keine Karte sichtbar. CameraUpdateFactory löst auch java.lang.NullPointerException aus: CameraUpdateFactory wird nicht in onMapReady (GoogleMap googleMap) initialisiert – LordSauron

+0

Wenn Sie nur ein Grid ohne Map haben, müssen Sie den API KEY und die googlemap-Berechtigungen überprüfen. In Bezug auf CameraUpdateFactory starten Sie in OnMapReady mit MapsInitializer.initialize (Kontext) starten. – Simone

+0

Aber wenn man ein Fragment in der Kartenansicht verwendet, wird die Karte angezeigt (wenn nur eine gezeichnet wird), so dass die Einstellungen für die Google Maps selbst nicht falsch sind. – LordSauron

1

Try die Fragmente zur Laufzeit das Hinzufügen von neuen MapFragment() verwendet und so weiter. Ich habe oft mit diesem Fehler Probleme bekommen, wenn ich das Kartenfragment mehr als einmal vom selben Layout aufgepumpt habe. Sonderausgabe ...