1

나는 현재 내 무술 조직 용 앱을 개발 중입니다. 내 상태 내의 각 무술 도장의 다른 위치를 표시하는 SupportMapFragment를 사용하는 단편을 갖고 싶습니다. 현재 "위치"라는 탭이있는 탐색 용 서랍이 설정되어 있습니다. 나는 Tutsplus의 사람들이 Zoo 응용 프로그램을 만들고 해당 응용 프로그램 내에지도를 포함하는 방법을 따라합니다. 내가보고있는 코드가 발견되었습니다 here. Youtube의 코드 및 튜토리얼에서 카메라를 제어하고 작동하도록 맵을 얻으려면 getMap().animateCamera...을 사용합니다. 나는 이미 getMap()이 Android에서 제거되었고, getMapAsync(this)이 더 나은 옵션이라는 것을 알고 있지만, 코드가 현재 설정되어있는 코드로 getMapAsync()을 어떻게 처리해야하는지 고민 중입니다. 일부는 사용할 수 있습니다. 보조. Google의 모든 문서를 살펴본 후이 사이트의 여러 스레드를 읽었지만 많은 행운이 없었습니다. 여기 내 LocationFragment.java 아래 내 코드입니다 : 아래SupportMapFragment Java Android Studio에서 getMap()을 사용하는 대신

public class LocationFragment extends SupportMapFragment { 

    public static LocationFragment getInstance() { 
     LocationFragment fragment = new LocationFragment(); 

     return fragment; 
    } 
    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 

     super.onViewCreated(view, savedInstanceState); 

     CameraPosition position = CameraPosition.builder() 
       .target(new LatLng(42.921966, -85.718533)) 
       .zoom(16f) 
       .bearing(0.0f) 
       .tilt(0.0f) 
       .build(); 

     getMap().animateCamera(CameraUpdateFactory.newCameraPosition(position), null); 
     getMap().setMapType(GoogleMap.MAP_TYPE_HYBRID); 
     getMap().setTrafficEnabled(true); 

     getMap().getUiSettings().setZoomControlsEnabled(true); 

     MarkerOptions options = new MarkerOptions().position(new LatLng(42.921966, -85.718533)); 
     options.title("KFCOM"); 
     options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)); 
     getMap().addMarker(options); 

     getMap().setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
      @Override 
      public boolean onMarkerClick(Marker marker) { 
       marker.showInfoWindow(); 
       return true; 
      } 
     }); 

     RestAdapter adapter = new RestAdapter.Builder() 
       .setEndpoint("https://gist.githubusercontent.com/anonymous/101ffbf7e1aed60b7caf7d3d5418bfde/raw/43b5d1fa6862fd1dce84044821cdf1a9d48b6ca2") 
       .build(); 
     PinsApiInterface pinsApiInterface = adapter.create(PinsApiInterface.class); 

     pinsApiInterface.getStreams(new Callback<List<Pin>>() { 
      @Override 
      public void onResponse(Call<List<Pin>> pins, Response<List<Pin>> response) { 
       for(Pin pin : response.body()) { 
        MarkerOptions options = new MarkerOptions().position(new LatLng(pin.getLatitude(), pin.getLongitude())); 
        options.title(pin.getName()); 
        options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); 
        getMap().addMarker(options); 
       } 
      } 

      @Override 
      public void onFailure(Call<List<Pin>> call, Throwable t) { 

      } 
     }); 
    } 
} 

그리고는 "위치"탭을 포함하여 다른 탭 사이의 탐색 서랍 및 스위치, 인스턴스 내 주요 활동입니다. 주 활동에서 변경해야 할 것이 있는지 확실하지 않기 때문에 모든 코드를 포함 시켰습니다. 조각 사이를 전환하는 코드는 코드 하단의 onDrawerSectionItemClickedEvent에 있습니다.

public class Home extends AppCompatActivity { 

    private DrawerLayout mDrawerLayout; 
    private ActionBarDrawerToggle mActionBarDrawerToggle; 
    private String mCurrentFragmentTitle; 

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

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

     mActionBarDrawerToggle = new ActionBarDrawerToggle(
       this, 
       mDrawerLayout, 
       R.string.drawer_opened, 
       R.string.drawer_closed) 

     { 
      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       if(getSupportActionBar() != null) 
        getSupportActionBar().setTitle(R.string.drawer_opened); 

      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       if(getSupportActionBar() != null) 
        getSupportActionBar().setTitle(R.string.drawer_closed); 
      } 
     }; 

     mDrawerLayout.addDrawerListener(mActionBarDrawerToggle); 

     displayInitialFragment(); 
    } 

    private void displayInitialFragment() { 
     getSupportFragmentManager().beginTransaction().replace(R.id.container, HomeFragment.getInstance()).commit(); 
     mCurrentFragmentTitle = getString(R.string.Home); 
    } 

    @Override 
    public void onPostCreate(Bundle savedInstanceState){ 
     super.onPostCreate(savedInstanceState); 
     mActionBarDrawerToggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     mActionBarDrawerToggle.onConfigurationChanged(newConfig); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     if (mActionBarDrawerToggle.onOptionsItemSelected(item)) 
      return true; 

     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     EventBus.getInstance().register(this); 
    } 

    @Override 
    protected void onStop() { 
     EventBus.getInstance().unregister(this); 
     super.onStop(); 
    } 

    @Subscribe 
    public void onDrawerSectionItemClickedEvent(DrawerSectionItemClickedEvent event) { 
     mDrawerLayout.closeDrawers(); 

     if(event == null || TextUtils.isEmpty(event.section) || event.section.equalsIgnoreCase(mCurrentFragmentTitle)) 
     { 
      return; 
     } 

     Toast.makeText(this, "Home: Section Clicked: " + event.section, Toast.LENGTH_SHORT).show(); 

     if(event.section.equalsIgnoreCase("locations")){ 
      getSupportFragmentManager().beginTransaction().replace(R.id.container, LocationFragment.getInstance()).commit(); 
     } else if (event.section.equalsIgnoreCase("current members")) 
     { 
      getSupportFragmentManager().beginTransaction().replace(R.id.container, MembersFragment.getInstance()).commit(); 
     } else if (event.section.equalsIgnoreCase("home")) 
     { 
      getSupportFragmentManager().beginTransaction().replace(R.id.container, HomeFragment.getInstance()).commit(); 
     } else { 
      return; 
     } 

     mCurrentFragmentTitle = event.section; 
    } 
} 

답변

0

단계 # 1 : LocationFragmentOnMapReadyCallback을 구현하게한다.

단계 # 2 : onMapReady()에 모든 현재 onViewCreated() 논리를 이동 (OnMapReadyCallback에 필요한)

단계 # 3 : onViewCreated()에서 getMapAsync(this)

+0

감사를 호출! 내가 겪은 문제가 해결 됐어. –

관련 문제