Я добавил карту в свое приложение, хотя и для одного вида. После создания нескольких макетов я хотел реализовать нижнее представление навигации, что означало, что мне пришлось использовать фрагменты. Я уже переместил код своей активности в свой фрагмент с именем map_fragment, сначала я не был уверен, где использовать FindFragmentById, но, согласно findViewById в фрагменте , это следует использовать в методе жизненного цикла OnCreateView (). Моя основная проблема сейчас заключается в захвате фрагмента карты, поскольку я получаю сообщение об ошибке Имя 'SuportMapFragment' не существует в текущем контексте при использовании
var mapFragment = (SupportMapFragment)SupportFragmentManager.FindFragmentById(Resource.Id.gmap);
// Was able to use FragmentManager, but it returns null...
// var mapFragment = (SupportMapFragment)FragmentManager.FindFragmentById(Resource.Id.gmap);
mapFragment.GetMapAsync(this);
Вот полный код
public class map_fragment : Android.Support.V4.App.Fragment, IOnMapReadyCallback
{
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your fragment here
}
public override void OnActivityCreated(Bundle savedInstanceState)
{
base.OnActivityCreated(savedInstanceState);
// Capture the Map Fragment
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Use this to return your custom view for this Fragment
base.OnCreateView(inflater, container, savedInstanceState);
View view = inflater.Inflate(Resource.Layout.activity_main, container, false);
var mapFragment = (SupportMapFragment)SupportFragmentManager.FindFragmentById(Resource.Id.gmap);
//var mapFragment = (SupportMapFragment)FragmentManager.FindFragmentById(Resource.Id.gmap);
mapFragment.GetMapAsync(this);
return view;
}
public void OnMapReady(GoogleMap _map)
{
// Some other code here
}
}
По запросу это мой main_activity
public class MainActivity : AppCompatActivity
{
BottomNavigationView bottomNavigation;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Initialize Xamarin Essentials for the Geolocation Service
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
SetContentView(Resource.Layout.main_frame);
//var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
//if (toolbar != null)
//{
// SetSupportActionBar(toolbar);
// SupportActionBar.SetDisplayHomeAsUpEnabled(false);
// SupportActionBar.SetHomeButtonEnabled(false);
//}
bottomNavigation = FindViewById<BottomNavigationView>(Resource.Id.bottom_navigation);
bottomNavigation.NavigationItemSelected += BottomNavigation_NavigationItemSelected;
// Load the first fragment on creation
LoadFragment(Resource.Id.profile_view);
}
private void BottomNavigation_NavigationItemSelected(object sender, BottomNavigationView.NavigationItemSelectedEventArgs e)
{
LoadFragment(e.Item.ItemId);
}
void LoadFragment(int id)
{
Android.Support.V4.App.Fragment fragment = null;
switch (id)
{
case Resource.Id.profile_view:
fragment = profile_fragment.NewInstance();
break;
case Resource.Id.map_view:
fragment = map_fragment.NewInstance();
break;
}
if (fragment == null)
return;
SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.content_frame, fragment)
.Commit();
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
Это учебные пособия, которые я использую в качестве руководства