5

나는 Material Design으로 놀아 나갈 아주 기본적인 앱을 얻으려고 노력해 왔습니다. 카드 뷰어에 Google지도 라이트가있는 모든 항목에 Listview (새 RecyclerView 사용)를 만들려고합니다.Google Map Lite in CardView

내가 basicly이 예 다음되었습니다 Creating Lists and Cards를, Google지도 구현을 위해 내가 this example

모든 일을 사용하고있다 "작품"내가 어댑터에 하나 개의 항목이있을 때 (그래서 단 하나 개의 항목이 디스플레이) 하지만 난 어댑터에 두 번째 항목을 추가 할 때 (그래서 제외 목록에 두 개의 항목) 응용 프로그램 충돌이 있어야한다 :

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. 

어느 한 내가 뭘 잘못 말해 줄 수?

오류 외에도 개별지도 (중앙 및 재료)에 속성을 설정하는 가장 좋은 방법은 무엇인지 알 수 없습니다. 그 지역의 도움은 또한 정말로 감사 할 것입니다. 참조

구현 :

활동

@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

전체 스택 트레이스를 제공 할 수 있습니까? – rciovati

+0

완전한 스택 트레이스로 질문을 업데이트했습니다. – LordSauron

답변

13

MapFragment가 대신지도보기를 사용해보십시오 :

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); 

} 

RecyclerView.AdapterOnMapReadyCallback를 구현해야합니다. 그래서 새로운 MapFragment가()을 사용하여 런타임에서 단편을 추가

시몬

+0

시도해 보았습니다. 실제로 두 개의 격자가 표시되었지만 볼 수있는지도가 없습니다. CameraUpdateFactory 또한 java.lang.NullPointerException을 발생시킵니다. onMapReady (GoogleMap googleMap)에서 CameraUpdateFactory가 초기화되지 않았습니다. – LordSauron

+0

지도가없는 그리드 만있는 경우 API 키와 googlemap 권한을 확인해야합니다. CameraUpdateFactory는 MapsInitializer.initialize (context)로 onMapReady에서 시작해보십시오. – Simone

+0

그러나 카드보기 내에서 조각을 사용하면지도가 표시되고 (하나만 그려지는 경우) Google지도 자체의 설정이 잘못되지 않습니다. – LordSauron

1

보십시오. 같은 레이아웃에서 두 번 이상 맵 조각을 팽창시킬 때이 오류가 자주 발생하여 문제가 발생했습니다. 이상한 문제 ...