Java 可以使用什么功能来代替“引用”;这";在;碎片;?

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

我正在GoogleMapPlaceAPI中实现自动完成建议代码。 我们正在使用
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
方法并在那里编写代码。