2

Android 앱에서 Google지도 v2를 사용하려고하는데 문제가 있습니다.ViewPager 조각에서 Google지도 V2를 사용하면 충돌이 발생합니까?

내 계획은 I가 모든 일을 설정 한 두 페이지와 viewpager (는 "세부"페이지와 "GoogleMap으로"페이지)

을하는 것입니다, 그것은 나에게 몇 가지 이상한 결과를주고 :

"googlemap"페이지로 스 와이프를 시작하면 애니메이션의 중간에 (예 : 중간에 뷰 페이지를 고정하는 것처럼) 맵로드가 제대로 표시됩니다. 바로 그 것입니다.

내가 설정 한 모든 것들 (마커, 카메라, 애니메이션 ...)은 예상대로 실행됩니다.

하지만 곧 내가 스 와이프를 완료하고 googlemap 페이지가 전체 화면을 차지하면 모든 것이 충돌합니다.

어떤 원인 일 수 있습니까? 여기

모든 관련 코드입니다 :

FragmentMap.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <fragment 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="200dp"/> 

</RelativeLayout> 

MapFragment.java

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 

public class MapFragment extends Fragment { 

    private GoogleMap map; 
    private static View view; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
     if (view != null) 
     { 
      ViewGroup parent = (ViewGroup) view.getParent(); 
      if (parent != null) 
       parent.removeView(view); 
     } 
     view = inflater.inflate(R.layout.fragment_map, container, false); 
     map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 

     getActivity().getSupportFragmentManager().popBackStack(); 
     return view; 

    } 

    public static MapFragment newInstance() { 
     MapFragment f = new MapFragment(); 
     return f; 
    } 
} 

DetailActivity.java

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 

public class DetailActivity extends FragmentActivity { 

    int extraID; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_detail_holder); 

     Intent prevIntent = getIntent(); 
     extraID = prevIntent.getIntExtra("selected_ID", 0); 

     ViewPager pager = (ViewPager) findViewById(R.id.viewpager); 
     pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager())); 
    } 

    private class MyPagerAdapter extends FragmentPagerAdapter { 

     public MyPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 
     @Override 
     public Fragment getItem(int pos) { 
      switch (pos) { 
      case 0: 
       return DetailFragment.newInstance(extraID); 
      case 1: 
       return MapFragment.newInstance(); 
      default: 
       return null; 
      } 
     } 

     @Override 
     public int getCount() { 
      return 2; 
     } 
    } 
} 

detailHolder.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

편집 : 로그 캣 여기

09-28 13:41:42.830: E/AndroidRuntime(12693): FATAL EXCEPTION: main 
09-28 13:41:42.830: E/AndroidRuntime(12693): java.lang.NullPointerException 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:394) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.support.v4.app.BackStackRecord.add(BackStackRecord.java:389) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:99) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.support.v4.view.ViewPager.populate(ViewPager.java:1048) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.support.v4.view.ViewPager.populate(ViewPager.java:914) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.support.v4.view.ViewPager$3.run(ViewPager.java:244) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.view.Choreographer.doFrame(Choreographer.java:531) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.os.Handler.handleCallback(Handler.java:725) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.os.Looper.loop(Looper.java:137) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at android.app.ActivityThread.main(ActivityThread.java:5230) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at java.lang.reflect.Method.invokeNative(Native Method) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at java.lang.reflect.Method.invoke(Method.java:525) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 
09-28 13:41:42.830: E/AndroidRuntime(12693): at dalvik.system.NativeStart.main(Native Method) 
+0

오류의 logcat 출력을 게시하십시오. – ssantos

+0

고마워, 잊어 버렸어. 추가됨. – user2717743

+0

적어도 "~에 의해 ..."라고 읽을 때까지 전체 logcat을 게시하십시오. 감사. – fasteque

답변

3

내 의견 :

  1. 채널 플랜지 detailHolder.xml detailholder.xml하는 안드로이드 xml 파일은 모두 소문자입니다

  2. 이 코드는 원인이 될 수있는지도 문제

    if (parent != null) 
    parent.removeView(view); 
    

당신은 상대 레이아웃을 사용하고 당신의 의견 중 하나를 제거 레이아웃과 관련되어 있으면 필드의 모든 레이아웃에 영향을 미칩니다. 선형 레이아웃과 같은 다른 레이아웃을 사용할 수 있습니다.

코드가 완전하지 않습니다. DetailFragment는 어떻게 사용 했습니까?

관련 문제