gpt4 book ai didi

android - 使用 ActionBar 选项卡在 onCreateView 中获取 Google Map Fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:08 25 4
gpt4 key购买 nike

我在 ActionBar 中使用 Tabs 时试图检索 Google Map fragment 。当我加载选项卡式页面时, map 加载正常,但我想获取 map 对象,以便我可以将其居中、添加标记等。

有没有办法做到这一点,如果有的话,有人会告诉我怎么做吗?

这是我的标签页的代码...

我正在使用的具体方法是public static class Map extends Fragment

public class Page3Activity extends FragmentActivity implements ActionBar.TabListener {  

final Context context = this;
static GoogleMap map;
static MapView mMapView;
DatabaseHandler db = new DatabaseHandler(context);

AppSectionsPagerAdapter mAppSectionsPagerAdapter;
ViewPager mViewPager;

@SuppressLint("NewApi")
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.page3);

// Create the adapter that will return a fragment for each of the three primary sections
// of the app.
mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());

ColorDrawable colorDrawable = new ColorDrawable();
final ActionBar actionBar = getActionBar();
colorDrawable.setColor(0xff9ACC00);
actionBar.setBackgroundDrawable(colorDrawable);
actionBar.setTitle("Road Trip Calculator");
actionBar.setSubtitle("Trip Information");
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE );

// Specify that the Home/Up button should not be enabled, since there is no hierarchical
// parent.
actionBar.setHomeButtonEnabled(false);

// Specify that we will be displaying tabs in the action bar.
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

// Set up the ViewPager, attaching the adapter and setting up a listener for when the
// user swipes between sections.
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mAppSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// When swiping between different app sections, select the corresponding tab.
// We can also use ActionBar.Tab#select() to do this if we have a reference to the
// Tab.
actionBar.setSelectedNavigationItem(position);
}
});

// For each of the sections in the app, add a tab to the action bar.
for (int i = 0; i < mAppSectionsPagerAdapter.getCount(); i++) {
// Create a tab with text corresponding to the page title defined by the adapter.
// Also specify this Activity object, which implements the TabListener interface, as the
// listener for when this tab is selected.
actionBar.addTab(
actionBar.newTab()
.setText(mAppSectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}

}

/*
* ACTIONBAR TOP BAR CODE
*/


@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}

@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
// When the given tab is selected, switch to the corresponding page in the ViewPager.
mViewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}

/**
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to one of the primary
* sections of the app.
*/
public static class AppSectionsPagerAdapter extends FragmentPagerAdapter {

public AppSectionsPagerAdapter(FragmentManager fm) {
super(fm);
}

//Switching between tabs
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return new Map();
case 1:
return new Directions();
case 2:
return new poiList();
case 3:
return new tripInfo();
default:
i=i+1;
}
return null;
}

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

@Override
public String getPageTitle(int position) {
String tabName = "";
if(position == 0) {
tabName = "Map";
} else if(position == 1) {
tabName = "Directions";
} else if(position == 2) {
tabName = "POI List";
} else if(position == 3) {
tabName = "Trip Info";
}
return tabName;

}
}

/**
* Map
*/
public static class Map extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.maptab, container, false);

//I want to be able to do something like this...
/*
GoogleMap map;
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map1);
map = fm.getMap();
map.DOSOMETHING
*/


return rootView;
}
}

/**
* Directions
*/

public static class Directions extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.directionstab, container, false);
((TextView) rootView.findViewById(android.R.id.text1)).setText(
"directions");
return rootView;
}
}

/**
* POI List
*/

public static class poiList extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.poitab, container, false);
((TextView) rootView.findViewById(android.R.id.text1)).setText(
"poiList");
return rootView;
}
}

/**
* Trip Info
*/

public static class tripInfo extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tripinfotab, container, false);
((TextView) rootView.findViewById(android.R.id.text1)).setText(
"Trip Info");
return rootView;
}
}

}

这是我的 XML 文件 (maptab.xml),我的 map fragment 在...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<fragment
android:id="@+id/map1"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"
/>

</LinearLayout>

已解决

    public static class Map extends Fragment {
MapView mapView;
GoogleMap map;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.maptab, container, false);

// Gets the MapView from the XML layout and creates it
mapView = (MapView) v.findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);

// Gets to GoogleMap from the MapView and does initialization stuff
map = mapView.getMap();
//map.getUiSettings().setMyLocationButtonEnabled(false);
//map.setMyLocationEnabled(true);
map.addMarker(new MarkerOptions().position(new LatLng(50.167003,19.383262)));


// Needs to call MapsInitializer before doing any CameraUpdateFactory calls
try {
MapsInitializer.initialize(this.getActivity());
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
}

// Updates the location and zoom of the MapView
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(43.1, -87.9), 10);
map.animateCamera(cameraUpdate);

return v;
}

@Override
public void onResume() {
mapView.onResume();
super.onResume();
}

@Override
public void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}

@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
}

最佳答案

您可以使用 mViewPager.getItem(0) 获取对包含 map 的 fragment 的引用,然后转换为 Map fragment 并以任何您喜欢的方式使用它。但这实际上不是很好的设计来从外部操作 fragment 。所以我建议你在 Map fragment 中实现与 map 相关的所有业务逻辑,这样你就不需要解决那种问题,你发布的所有业务逻辑都封装在里面一个 fragment ,它是可移植的。

关于android - 使用 ActionBar 选项卡在 onCreateView 中获取 Google Map Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17820880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com