Делайте что-то с деятельностью Google Maps в другом классе, например, MainActivity. - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу изменить mapType или сделать что-то другое с картой в моей основной деятельности с опциейMenu, как на фото:

Мое приложение с опциейItem

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test_relative_layout);
        Toolbar toolbar = findViewById(R.id.toolBar);
        setSupportActionBar(toolbar);
        toolbar.setTitleTextColor(Color.rgb(60, 99, 130));
        SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager());
        ViewPager viewPager = findViewById(R.id.view_pager);
        viewPager.setAdapter(sectionsPagerAdapter);
        TabLayout tabs = findViewById(R.id.tabs);
        tabs.setupWithViewPager(viewPager);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.vue_satellite:
                Toast.makeText(this, "Hi", Toast.LENGTH_SHORT).show();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

FontaineActivity.java (фрагмент карты Google):

public class FontaineActivity extends Fragment implements OnMapReadyCallback {

    private GoogleMap mMap;

    private Location currentLocation;
    private FusedLocationProviderClient fusedLocationClient;
    private static final int REQUEST_CODE = 101;

    private LatLng escargots0 = new LatLng(47.473329,-0.545088);
    private LatLng garenne1 = new LatLng(47.477132,-0.577087);
    private LatLng quaiLigny2 = new LatLng(47.471931,-0.557854);
    private LatLng Lycee3 = new LatLng(47.472784, -0.556277);

    private float [] results = new float[1];
    private int [] distances = new int[4];
    private int minVal;
    private int index;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_fontaine, container, false);

        FloatingActionButton fabClosestFontaine = view.findViewById(R.id.fab);
        fabClosestFontaine.setTranslationY(-100);
        fabClosestFontaine.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (index){
                    case 0 :
                        Toast.makeText(getContext(), "Distance : " + minVal + " m",Toast.LENGTH_LONG).show();
                        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(escargots0,15));
                        break;
                    case 1 :
                        Toast.makeText(getContext(), "Distance : " + minVal + " m",Toast.LENGTH_LONG).show();
                        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(garenne1,15));
                        break;
                    case 2 :
                        Toast.makeText(getContext(), "Distance : " + minVal + " m",Toast.LENGTH_LONG).show();
                        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(quaiLigny2,15));
                        break;
                    case 3 :
                        Toast.makeText(getContext(), "Distance : " + minVal + " m",Toast.LENGTH_LONG).show();
                        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(Lycee3,15));
                        break;

                }
            }
        });
        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        fusedLocationClient = LocationServices.getFusedLocationProviderClient(Objects.requireNonNull(getActivity()));
        fetchLastLocation();
    }

    private void fetchLastLocation() {
        if (ActivityCompat.checkSelfPermission(Objects.requireNonNull(getActivity()), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(Objects.requireNonNull(getContext()), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(getActivity(), new String[]
                    {Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE);
            return;
        }
        Task<Location> task = fusedLocationClient.getLastLocation();
        task.addOnSuccessListener(new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                if (location != null) {
                    currentLocation = location;
                    SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.fontaine_map);
                    assert mapFragment != null;
                    mapFragment.getMapAsync(FontaineActivity.this);
                }
            }
        });
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        LatLng latLng = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
        MarkerOptions markerOptions = new MarkerOptions().position(latLng)
                .title("Good water !");
        googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,13));
        googleMap.addMarker(markerOptions);

        Location.distanceBetween(latLng.latitude, latLng.longitude, escargots0.latitude, escargots0.longitude,  results );
        distances [0] = (int) results [0];
        Location.distanceBetween(latLng.latitude, latLng.longitude, garenne1.latitude, garenne1.longitude,  results );
        distances [1] = (int) results [0];
        Location.distanceBetween(latLng.latitude, latLng.longitude, quaiLigny2.latitude, quaiLigny2.longitude,  results );
        distances [2] = (int) results [0];
        Location.distanceBetween(latLng.latitude, latLng.longitude, Lycee3.latitude, Lycee3.longitude,  results );
        distances [3] = (int) results [0];

        mMap.addMarker(new MarkerOptions().position(escargots0).title("Aux escargots").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)).snippet("Distance : " + distances[0] + "m"));
        mMap.addMarker(new MarkerOptions().position(garenne1).title("Entrée Parc de la Garenne").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)).snippet("Distance : " + distances[1] + "m"));
        mMap.addMarker(new MarkerOptions().position(quaiLigny2).title("Fontaines Quai Ligny").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)).snippet("Distance : " + distances[2] + "m"));
        mMap.addMarker(new MarkerOptions().position(Lycee3).title("Au lycée").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)).snippet("Distance : " + distances[3] + "m"));

        minVal = minimum();
        index = getArrayIndex(distances,minVal);
    }

    private int minimum(){
        int j = distances[0];
        for (int distance : distances) {
            if (distance < j) {
                j = distance;
            }
        }
        return j;
    }

    private int getArrayIndex(int[] arr,int value) {

        int k=0;
        for(int i=0;i<arr.length;i++){

            if(arr[i]==value){
                k=i;
                break;
            }
        }
        return k;
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                fetchLastLocation();
            }
        }
    }
}

Поэтому я хочу изменить тост с надписью "Hi" на onOptionsItemSelected в MainActivity.java с помощью ".setMapType", чтобы изменить карту в FontaineActivity.java, когда есть щелчок на optionItem.Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...