我有一个FragmentActivity,我想在其中使用一个地图片段。我在获取支持片段管理器访问它时遇到了问题。
if (googleMap == null) {
googleMap = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map1)).getMap();
// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
}
// create marker
MarkerOptions marker = new MarkerOptions().position(
new LatLng(latitude, longitude)).title("Hello Maps ");
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(latitude, longitude)).zoom(15).build();
googleMap.animateCamera(CameraUpdateFactory
.newCameraPosition(cameraPosition));
// adding marker
googleMap.addMarker(marker);
答案 0 :(得分:226)
您可以直接致电
getFragmentManager()
获取片段管理器。
或
在你的片段中,
创建字段:
private FragmentActivity myContext;
覆盖片段的onAttach方法:
@Override
public void onAttach(Activity activity) {
myContext=(FragmentActivity) activity;
super.onAttach(activity);
}
当您需要获得支持片段管理器调用时:
FragmentManager fragManager = myContext.getSupportFragmentManager(); //If using fragments from support v4
或
FragmentManager fragManager = myContext.getFragmentManager();
你已经完成了。
答案 1 :(得分:77)
答案 2 :(得分:38)
简直就是这样 -
getFragmentManager() // This will also give you the SupportFragmentManager or FragmentManager based on which Fragment class you have extended - android.support.v4.app.Fragment OR android.app.Fragment.
或强>
getActivity().getSupportFragmentManager();
在Fragment的onActivityCreated()方法和onActivityCreated()之后调用的任何方法。
答案 3 :(得分:12)
Kotlin用户尝试这个答案
(activity as AppCompatActivity).supportFragmentManager
答案 4 :(得分:8)
如果您遇到此问题并且在api级别21+上执行此操作:
def pageDownload(webPage):
# Downloads the page
while not url.endswith('appendixc'):
print('Downloading page %s...' % url)
res = requests.get(url)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text)
return soup
def getProjects(downloadedPage):
# gets the projects contents
soup = downloadedPage
book = soup.find_all('div', {'class': "book", 'title' : 'Practice Projects'})
print(book)
这将在片段内部使用时获取地图。
答案 5 :(得分:6)
您可以随时使用getActivity().getSupportFragmentManager()
getSupportFragmentManager。
层次结构是活动 - >分段。 fragment不能直接调用getSupportFragmentManger,但Activity可以。因此,您可以使用getActivity调用片段所在的当前活动并获取getSupportFragmentManager()
答案 6 :(得分:6)
在Java中,您可以替换为
getChildFragmentManager()
在Kotlin中,简化操作
childFragmentManager
希望有帮助:)
答案 7 :(得分:4)
getFragmentManager()
已被弃用,取而代之的是 getParentFragmentManager()
,以明确您希望访问父片段的片段管理器而不是任何子片段。
只需在 Java 中使用 getParentFragmentManager()
或在 Kotlin 中使用 parentFragmentManager
。
答案 8 :(得分:4)
My Parent Activity扩展了AppCompatActivity,所以我不得不将我的上下文转换为AppCompatActivity而不仅仅是Activity。
例如
FragmentAddProduct fragmentAddProduct = FragmentAddProduct.newInstance();
FragmentTransaction fragmentTransaction = ((AppCompatActivity)mcontext).getSupportFragmentManager().beginTransaction();
答案 9 :(得分:3)
在您的片段中执行此操作
getActivity().getSupportFragmentManager()
答案 10 :(得分:3)
在Kotlin中完成此操作的简单新方法
requireActivity().supportFragmentManager
答案 11 :(得分:2)
getActivity().getFragmentManager()
这对我有用。
另请查看here.
答案 12 :(得分:1)
您只需访问
即可Context mContext;
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mContext = getActivity();
}
然后使用
FragmentManager fm = ((FragmentActivity) mContext)
.getSupportFragmentManager();
答案 13 :(得分:1)
以下代码为我提供了诀窍
SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map));
mapFragment.getMapAsync(this);
答案 14 :(得分:1)
一些Kotlin代码在Fragment中使用supportFragmentManager。
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
super.onCreateView(inflater, container, savedInstanceState)
val rootView = inflater.inflate(R.layout.fragment_home, container, false)
// ....
if (rootView.home_play_btn != null) {
rootView.home_play_btn.setOnClickListener {
val fragment: BaseFragment = ListFragment.newInstance()
val fragManager: FragmentManager = (activity as AppCompatActivity).supportFragmentManager
fragManager.beginTransaction()
.replace(R.id.content_home_frame, fragment, TAG).commit()
}
答案 15 :(得分:0)
getSupportFragmentManager()
但是在片段中你可以访问
getSupportFragmentManager()
使用另一种名为getFragmentMangaer()
的方法与getSupportFragmentManager()
的工作方式相同,您可以像以前一样使用它:
fragmentTransaction =getFragmentManager().beginTransaction();
答案 16 :(得分:0)
((AppCompatActivity) getActivity()).getSupportFragmentManager()
答案 17 :(得分:0)
您可以在片段内使用childFragmentManager。
答案 18 :(得分:-1)
试试这个:
private SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getActivity().getSupportFragmentManager());