当前位置: 首页 > 知识库问答 >
问题:

使用MapView在片段之间切换

娄浩荡
2023-03-14

我有一个带有底栏的main_activity。我正在使用这个底栏在片段之间导航。然而,有一个片段不能通过底部栏直接导航。它必须通过MapView和onInfowindowClick从片段中访问。然而,每当我使用InfoWindow时,该应用程序就会崩溃。这是我的代码

public void onMapReady(GoogleMap googleMap) {
        BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.tesla);
        mMap=googleMap;
        for (Location item : array_list) {
            String _title = item.getLocation_name();
            String _snippet = item.getLocation_address();
            LatLng _latLng = new LatLng(item.getLatitude(), item.getLongitude());
            final MarkerOptions mMarkerOptions = new MarkerOptions().icon(icon);
            mMarkerOptions.position(_latLng).title(_title).snippet(_snippet).flat(true);
            Marker marker = mMap.addMarker(mMarkerOptions);
            mMarkerHashMap.put(marker, item);

            CameraPosition cameraPosition = new CameraPosition.Builder()
                    .target(marker.getPosition())
                    .zoom(12.0f)
                    .build();
            mMap.animateCamera(CameraUpdateFactory
                    .newCameraPosition(cameraPosition));

            mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
                @Override
                public void onInfoWindowClick(Marker marker) {
                    LocationDetailFragment detailedlocation = new LocationDetailFragment();

                    detailedlocation.LOCATION = mMarkerHashMap.get(marker);
                    FragmentTransaction ft = getFragmentManager().beginTransaction();
                    ft.replace(R.id.content, detailedlocation);
                    ft.addToBackStack(null);
                    ft.commit();
                }
            });
        }
                                                                             --------- beginning of crash 04-23 19:41:11.380 2573-2573/com.teslaqubitsins.fasih.teslahcm E/AndroidRuntime: FATAL

异常:main process:com.teslaqubitsins.fasih.teslahcm,pid:2573 java.lang.nullpointerexception:试图在com.teslaqubitsins.fasih.teslahcm.locationDetailfragment.oncreateView(locationDetailfragment.java:35)和Android.support.v4.app.fragment.performCreateView(fragment.java:2192)和Android.support.v4.app.fragment.moveToState(在Android.support.v4.app.fragmentManagerimpl.moveFragmentToExpectedState(FragmentManager.java:1528)在Android.support.v4.app.fragmentManagerimpl.moveToState(FragmentManager.java:1595)在Android.support.v4.app.backstackRecord.executeOps(BackstackRecord.java:758)在Android.support.v4.app.fragmentManagerimpl.executeOps(FragmentManager.java:2363)在执行(碎片)nager.java:2103)在Android.support.v4.app.fragmentManagerImpl.execPendingActions(FragentManager.java:2013),android.support.v4.app.fragmentManagerImpl$1.run(FragmentManager.java:710),android.support.v4.app.fragmentManagerImpl.run(fragmentManager.java:71),android.os.handler.handleCallback(handler.java:751)在Android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:886)at com.android.internal.os.zygoteinit.main(zygoteinit.java:776)04-23 19:41:11.383 156 4-1957/system_process W/activitymanager:强制完成活动com.teslaqubitsins.fasih.teslahcm/.mainactivity 04-23 19:41:11.414 129 6-1653/?E/surfaceflinger:ro.sf.lcd_density必须定义

                                             [ 04-23 19:41:11.456  1564: 3367 D/         ]
                                             HostConnection::get() New Host Connection established 0x87cb5680, tid 3367 04-23

19:41:11.457 129 6-1653/?d/gralloc_ranchu:gralloc_alloc:格式1和用法0x900意味着创建主机颜色缓冲区04-23 19:41:11.457 156 4-3367/system_process I/openglenderer:初始化EGL,版本1.4 04-23 19:41:11.458 156 4-3367/system_process D/openglenderer:交换行为1 04-23 19:41:11.458 156 4-3367/system_process W/openglenderer:选择带有EGL_SWAP_Behavior_President的配置失败,正在重试,没有...04-23 19:41:11.458 156 4-3367/System_Process D/OpenGlenderer:交换行为0.04-23 19:41:11.462 129 6-1653/?d/gralloc_ranchu:gralloc_alloc:格式1和用法0x900意味着创建主机颜色缓冲区04-23 19:41:11.476 129 6-1653/?d/gralloc_ranchu:gralloc_alloc:格式1和用法0x900意味着创建主机颜色缓冲区04-23 19:41:11.892 156 4-1591/system_process W/activitymanager:Activity pause timeout for ActivityRecord{34a233 u0 com.teslaqubitsins.fasih.teslahcm/.mainactivity t141 f}04-23 19:41:11.921 129 6-1962/?d/gralloc_ranchu:gralloc_alloc:格式1和用法0x900意味着创建主机颜色缓冲区04-23 19:41:11.940 129 6-1962/?d/gralloc_ranchu:gralloc_alloc:格式1和用法0x900意味着创建主机颜色缓冲区04-23 19:41:11.951 129 6-1962/?d/gralloc_ranchu:gralloc_alloc:格式1和用法0x900意味着创建主机颜色缓冲区04-23 19:41:11.968 129 6-1426/?d/permissioncache:检查Android.permission.read_frame_buffer for UID=1000=>grated(252 us)04-23 19:41:12.025 129 6-1426/?d/gralloc_ranchu:gralloc_alloc:格式1和用法0x333意味着创建主机颜色缓冲区块引号

package com.teslaqubitsins.fasih.teslahcm;


import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;



public class LocationDetailFragment extends Fragment {
    public static Location LOCATION;
    TextView _campusName;
    TextView _campusAddress;


    public LocationDetailFragment() {
    }


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

        View view=inflater.inflate(R.layout.fragment_location_detail, container, false);

        _campusName = (TextView) getView().findViewById(R.id.campus_name);
        _campusAddress = (TextView) getView().findViewById(R.id.campus_address);

        _campusName.setText(LOCATION.getLocation_name());
        _campusAddress.setText(LOCATION.getLocation_address());
        return view;

    }
    public void onClick_call(View view) {
        dialPhoneNumber(LOCATION.getLocation_phone());
    }
    public void dialPhoneNumber(String phoneNumber) {
        Intent intent = new Intent(Intent.ACTION_DIAL);
        intent.setData(Uri.parse("tel:" + phoneNumber));
        if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
            startActivity(intent);
        }
    }
}

04-23 19:58:11.735 685 6-6856/com.teslaqubitsins.fasih.teslahcm e/androidruntime:致命异常:main process:com.teslaqubitsins.fasih.teslahcm,pid:6856 java.lang.nullpointerexception:试图在com.teslaqitsins.fasih.teslahcm.locationdetailfragment.oncreateview(locationdetailfragment.java.app.fragment.performcreateview(2192)在Android.support.v4.app.fragmentManagerImpl.moveToState(fragmentManager.java:1299)在Android.support.v4.app.fragmentManagerImpl.moveFragmentToExpectedState(fragmentManager.java:1528)在Android.support.v4.app.fragmentManagerImpl.moveState(fragmentManager.java:1595)在Android.support.v4.app.fragmentManagerImpl.moveToState(ExecuteOpstoGether(FragmentManager.java:2149)在Android.support.v4.app.fragmentManagerImpl.OptimizeandExecuteOps(FragentManager.java:2103),在Android.support.v4.app.fragmentManagerImpl.execPendingActions(FragentManager.java:2013),在Android.support.v4.app.fragmentManagerImpl$1.run(FragmentManager.java:710),在.main(activitythread.java:6119)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:886)在com.android.internal.os.zygoteinit.main(zygoteinit.java:776)04-23 19:58:12.507 2006-2282/com.google.android.googleQuicksearchbox:search W/GMSLocationProvider:删除位置更新时出错:16

共有1个答案

方浩旷
2023-03-14

而不是:

 _campusName = (TextView) getView().findViewById(R.id.campus_name);
 _campusAddress = (TextView) getView().findViewById(R.id.campus_address);

使用片段的膨胀视图获取ID:

 _campusName = (TextView) view.findViewById(R.id.campus_name);
 _campusAddress = (TextView) view.findViewById(R.id.campus_address);

当您的getview()返回null时会发生异常,它与片段的视图没有关联。在片段中,必须始终使用膨胀视图的引用。

 类似资料:
  • 这是我第一次尝试开发android应用程序。 我有一个带有ConstraintLayout的MainActivity,它具有BottomNavigationView。每当选择第一个导航项时,我想显示一个类别列表(显示在片段中),然后每当选择此类别时,将显示与该特定类别相关的另一个列表(显示在另一个片段中)。 我读到(Android-fragment.replace()不替换内容-将其放在顶部)它指

  • 我有一个带有导航抽屉的应用程序,它为每个菜单项使用片段。 每次单击一个项目时,我都会替换当前片段。 问题是,在用户单击后显示新片段需要很长时间,并且它会被卡住。加载时间最长的片段是一个片段,其中还包含子片段的选项卡(一个片段包含一个RecyclerView)<有什么方法可以加快碎片的装载速度吗?(如果可能的话,可能会提前初始化它们?) 这是我的代码: HalachaFragment。cs(包含选项

  • 问题内容: 我想拥有自己的内心 这是我的xml文件 我的档案 和我的Fragment类 启动应用程序时,我的片段中看不到任何地图视图 问题答案: 来自Josh Holtz在GitHub上的示例: 您应该添加在你喜欢 并实现你的喜欢

  • 当使用底部导航视图在片段之间切换时,每次按下按钮时都会重新创建片段。 这是我的代码:

  • 编辑:我的滑动标签碎片ATabs似乎有问题。没有使用ATabs片段,只需使用导航抽屉在片段A1和B之间切换,一切都很好!可以添加列表项。编辑的主要活动: 但当我使用ATabs片段(见下面的MainActivity)并切换到它并返回时,就不可能再添加ListItems了。尽管Logcat显示日志。v(LOG_标签,“添加项”) 每次按add()。 我不知道是什么导致了这个问题。如果ATabs需要是一

  • 我正在开发一个android应用程序,它使用导航抽屉在两个片段之间切换。然而,每次我切换时,片段都会被完全重新创建。 这是我主要活动的代码。 我设置了一些调试日志记录,每次调用selectItem时,都会销毁一个片段,而创建另一个片段。 有什么方法可以防止碎片被重新创建,而只是重复使用它们吗?