Java 可以使用什么功能来代替“引用”;这";在;碎片;?
我正在GoogleMapPlaceAPI中实现自动完成建议代码。 我们正在使用Java 可以使用什么功能来代替“引用”;这";在;碎片;?,java,android,android-studio,Java,Android,Android Studio,我正在GoogleMapPlaceAPI中实现自动完成建议代码。 我们正在使用OnMapReadyCallback作为实现 MapView.getMapAsync(this)函数最初用于onCreateView。但现在我将在设置自动完成片段中使用它。但是,在MapView.getMapAsync(this)中,由于this的原因,它没有被编译。可以使用什么 public class googlemaptab extends Fragment implements OnMapReadyCallba
OnMapReadyCallback
作为实现
MapView.getMapAsync(this)
函数最初用于onCreateView
。但现在我将在设置自动完成片段中使用它。但是,在MapView.getMapAsync(this)
中,由于this
的原因,它没有被编译。可以使用什么
public class googlemaptab extends Fragment implements OnMapReadyCallback {
MapView mapview;
Button kakaobutton;
public static googlemaptab newInstance(){
return new googlemaptab();
}
public googlemaptab() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_googlemaptab, container, false);
kakaobutton = (Button)view.findViewById(R.id.kakaobutton);
mapview = (MapView)view.findViewById(R.id.google_map_view);
setupAutoCompleteFragment();
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
kakaobutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//클릭하면 카카오maptab으로 이동하겠다.
((MainActivity)getActivity()).replaceFragment(kakaomaptab.newInstance());
}
});
}
@Override
public void onStart() {
super.onStart();
mapview.onStart();
}
@Override
public void onResume() {
super.onResume();
mapview.onResume();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(mapview != null)
{
mapview.onCreate(savedInstanceState);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
LatLng SEOUL = new LatLng(37.56, 126.97);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(SEOUL);
markerOptions.title("서울");
markerOptions.snippet("수도");
googleMap.addMarker(markerOptions);
googleMap.moveCamera(CameraUpdateFactory.newLatLng(SEOUL));
googleMap.animateCamera(CameraUpdateFactory.zoomTo(13));
}
private void setupAutoCompleteFragment() {
PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)getActivity().
getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
mapview.getMapAsync(this);
}
@Override
public void onError(Status status) {
Log.e("Error", status.getStatusMessage());
}
});
}
}
您可以使用Classname。在本例中,这个
例如:如果您的片段名称是HomeFragment
,那么
HomeFragment.this
如果这仍然不起作用,那么您可以重写onViewCreated()
函数,并调用mapView.getmapsync(this)
内部onViewCreated()
如果需要,请检查此项这样做可以做得更好
private void setupAutoCompleteFragment(OnMapReadyCallback instance) {
PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)getActivity().
getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
mapview.getMapAsync(instance);
}
@Override
public void onError(Status status) {
Log.e("Error", status.getStatusMessage());
}
});
}
不要忘记使用新函数签名更新您的onCreateView
,如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_googlemaptab, container, false);
kakaobutton = (Button)view.findViewById(R.id.kakaobutton);
mapview = (MapView)view.findViewById(R.id.google_map_view);
setupAutoCompleteFragment(this);
return view;
}
您是否尝试过使用mapview.getMapAsync(getActivity());而不是mapview.getMapAsync(此) 在mapview.getMapAsync(this)中可以使用什么来代替“this”;那是一种代码气味!HomeFragment
很容易通过这种方式泄漏。如果它泄漏了HomeFragment
,那么可能会覆盖onViewCreated
方法并在那里编写代码。