gpt4 book ai didi

android - 将 Google Map fragment 嵌套在自定义 fragment 中

转载 作者:太空狗 更新时间:2023-10-29 14:17:27 26 4
gpt4 key购买 nike

我正在尝试使用 fragment 创建滑动 View 。其中一个 fragment 应该包装 GoogleMap MapFragment。直接在主要 Activity 中 Inflating MapFragment 工作正常。但是通过 FragmentPagerAdapter 进行操作会抛出在 Choreographer.class 中找不到的源。我找不到线索为什么会发生。我根据this设置了这一切回答。所以我的代码看起来像这样:

主 Activity

public class MainActivity extends FragmentActivity {

FragPagerAdapter _fragPagerAdapter;
ViewPager _viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);

_fragPagerAdapter = new FragPagerAdapter(getFragmentManager());
_viewPager = (ViewPager)findViewById(R.id.pager);
_viewPager.setAdapter(_fragPagerAdapter);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);

return true;
}

public class FragPagerAdapter extends FragmentPagerAdapter {

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

@Override
public Fragment getItem(int position) {

Fragment fragment = null;

if(position == 1){
fragment = new LocMapFragment(); //CRASHES
}else{
//Doesn't contain map .WORKS
fragment = new DummySectionFragment();
Bundle args = new Bundle();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
fragment.setArguments(args);
}

return fragment;
}

@Override
public int getCount() {
// Show 3 total pages.
return 3;
}

@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:

return getString(R.string.title_section1).toUpperCase(l);
case 1:
return getString(R.string.title_section2).toUpperCase(l);
case 2:
return getString(R.string.title_section3).toUpperCase(l);
}
return null;
}
}


}

LocMapFragment

public class LocMapFragment extends Fragment {

private GoogleMap _map;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){

View v = inflater.inflate(R.layout.map_layout, null, false);

_map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();

return v;
}
}

ma​​p_layout布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

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

</RelativeLayout>

我正在使用来自 Android API 而不是支持 V4 的 fragment 。我尝试将 fragment 布局更改为 class="com.google.android.gms.maps.SupportMapFragment"并且仍然相同。

更新:

好的,不知何故它现在开始工作了。但是现在发生的情况是,如果 map fragment 在第一个滑动 fragment 中,然后我又进行了两次只有文本的滑动。如果我从 map 滚动到另一个 map ,然后向后滚动,我在 Choreographer.class 上遇到异常。

This answer seem to have solved the issue.

最佳答案

看看这个实现,你应该像你已经做的那样,创建一个带有 map 的 fragment :

public class MapFragment extends Fragment

创建布局:ma​​pview.xml:

<?xml version="1.0" encoding="utf-8"?>

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/mapview"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraZoom="12"
map:mapType="normal"
map:uiZoomControls="false"
map:uiRotateGestures="true"
map:uiScrollGestures="true"
map:uiZoomGestures="true"
map:uiTiltGestures="false" />

然后在 fragment 中这样做:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

return inflater.inflate(R.layout.mapview, container, false);
}

然后获取 map 实例:

private GoogleMap getGoogleMap() {
if (map == null && getActivity() != null && getActivity().getSupportFragmentManager()!= null) {
SupportMapFragment smf = (SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.mapview);
if (smf != null) {
map = smf.getMap();
}
}
return map;
}

关于android - 将 Google Map fragment 嵌套在自定义 fragment 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20583392/

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