Android: Как добавить карту Google в ViewPager? - PullRequest
0 голосов
/ 15 апреля 2020

Я хочу сделать приложение, на главном экране которого есть ViewPager с картой и разделом профиля. Следовательно, для позиции = 0 в ViewPager есть карта, а для позиции = 1 - профиль.

Для каждого из этих двух «разделов» на главном экране у меня есть два действия: карта. xml с MapActivity. java и профиль. xml с профилем. java. Оба из них надуваются в классе EnumFrag java, в зависимости от позиции (вы видите, если).

У меня есть две проблемы:

  1. Первая - когда я пытаюсь скользить влево или вправо, карта перемещается, а не ViewPager к следующему слайду. Я попытался нанести форму на край, но она не работает, так как жест слайда проходит через форму. Любая помощь здесь, пожалуйста?
  2. Второй относится к первому, классу MapActivity. java даже не работает, потому что не запускается onCreate (я поставил там тост, чтобы отобразить что-то и ничего не произошло) , Любая помощь, пожалуйста? (Я создаю объект класса карты).

map. xml содержит простой фрагмент с идентификатором карты.

MapActivity. java:

public class MapActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap map;
    private Location me;
    private FusedLocationProviderClient fusedLocationProviderClient;
    private static final int REQUEST_CODE = 101;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Toast.makeText(this, "hey din onCreate", Toast.LENGTH_SHORT).show();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);

        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
        getLastLocation();
    }

    private void getLastLocation() {
        if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},REQUEST_CODE);
            return;
        }
        Toast.makeText(getApplicationContext(), "hey...", Toast.LENGTH_SHORT).show();
        Task<Location> task = fusedLocationProviderClient.getLastLocation();
        task.addOnSuccessListener(new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                if(location != null){
                    me = location;
                    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
                    mapFragment.getMapAsync(MapActivity.this);
                }
                else
                    Toast.makeText(getApplicationContext(), "Deschide-ti locatia", Toast.LENGTH_SHORT).show();
            }
        });
    }

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

        MapStyleOptions mapStyleOptions= MapStyleOptions.loadRawResourceStyle(this,R.raw.map_style);
        googleMap.setMapStyle(mapStyleOptions);

        LatLng point = new LatLng(me.getLatitude(),me.getLongitude());

        MarkerOptions markerOptions = new MarkerOptions().position(point).title("Me");

        googleMap.animateCamera(CameraUpdateFactory.newLatLng(point));
        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(point,16));

        googleMap.addMarker(markerOptions);
    }

    @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) {
                getLastLocation();
            }
        }
    }
}

Профиль. java

public class Profile extends AppCompatActivity {

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

        EditText username = findViewById(R.id.usernameProfile);
        username.setText(MainScreen.getUsername());

    }
}

EnumFragment. java

public class EnumFragments extends PagerAdapter {


    private Context context;

    public EnumFragments(Context context) {
        this.context = context;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view;
        MapActivity mapActivity = new MapActivity();

        switch (position){
            case 0:
                view = layoutInflater.inflate(R.layout.activity_profile,null);
                break;
            default:
                view = layoutInflater.inflate(R.layout.activity_map,null);
                break;

        }

        ViewPager viewPager = (ViewPager)container;
        viewPager.addView(view);

        return view;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        ViewPager viewPager = (ViewPager)container;
        View view = (View) object;
        viewPager.removeView(view);
    }

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

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }
}

MainScreen. java

public class MainScreen extends AppCompatActivity {

    private static String username;
    private ViewPager viewPager;
    private EnumFragments enumFragments;
    private static int userID;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_screen);
        Bundle extras = getIntent().getExtras();
        userID = extras.getInt("userID");
        username = extras.getString("username");

        viewPager = findViewById(R.id.mainSlider);
        EnumFragments enumFragments = new EnumFragments(this);
        viewPager.setAdapter(enumFragments);
    }

    public static int getUserID() {
        return userID;
    }

    public static String getUsername() {
        return username;
    }

    @Override
    public void onBackPressed() {
        //Nothing
    }
}

1 Ответ

0 голосов
/ 15 апреля 2020

Почему вы не добавляете MapActivity в действие MainScreen. Вы даже не используете MapActivity в своем классе PagerAdapter. Я бы сделал другой атрибут в конструкторе вашего PagerAdapter, после этого:

private MapActivity current;


public EnumFragments(MapActivity map_activity)
{
this.current = map_activity;
}

, затем я бы поместил метод getter в map_activity, который возвращает представление, где вы можете увидеть текущий GoogleMap или другой функции.

Ваша проблема в том, что вы не используете новый MapActivity ...

Я надеюсь, что это может помочь вам

...