【问题标题】:Switch between fragments with MapView使用 MapView 在片段之间切换
【发布时间】:2023-03-19 16:08:01
【问题描述】:

我有一个带有底栏的 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

例外:主要 进程:com.teslaqubitsins.fasih.teslahcm,PID:2573 java.lang.NullPointerException:尝试调用虚拟方法 'android.view.View android.view.View.findViewById(int)' 为空 对象引用 在 com.teslaqubitsins.fasih.teslahcm.LocationDetailFragment.onCreateView(LocationDetailFragment.java:35) 在 android.support.v4.app.Fragment.performCreateView(Fragment.java:2192) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 在 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) 在 android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 在 android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013) 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.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:41:11.383 1564-1957/system_process W/ActivityManager:强制 完成活动 com.teslaqubitsins.fasih.teslahcm/.MainActivity 04-23 19:41:11.414 1296-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 1296-1653/? D/gralloc_ranchu:gralloc_alloc:格式 1 和 用法 0x900 暗示创建主机颜色缓冲区 04-23 19:41:11.457 1564-3367/system_process I/OpenGLRenderer:初始化的 EGL,版本 1.4 04-23 19:41:11.458 1564-3367/system_process D/OpenGLRenderer:交换行为 1 04-23 19:41:11.458 1564-3367/system_process W/OpenGLRenderer:无法选择配置 EGL_SWAP_BEHAVIOR_PRESERVED,重试不... 04-23 19:41:11.458 1564-3367/system_process D/OpenGLRenderer:交换行为 0 04-23 19:41:11.462 1296-1653/? D/gralloc_ranchu:gralloc_alloc:格式 1 和 用法 0x900 暗示创建主机颜色缓冲区 04-23 19:41:11.476 1296-1653/? D/gralloc_ranchu:gralloc_alloc:格式1和用法0x900 暗示创建主机颜色缓冲区 04-23 19:41:11.892 1564-1591/system_process W/ActivityManager:活动暂停超时 活动记录{34a233 u0 com.teslaqubitsins.fasih.teslahcm/.MainActivity t141 f} 04-23 19:41:11.921 1296-1962/? D/gralloc_ranchu:gralloc_alloc:格式 1 和 用法 0x900 暗示创建主机颜色缓冲区 04-23 19:41:11.940 1296-1962/? D/gralloc_ranchu:gralloc_alloc:格式1和用法0x900 暗示创建主机颜色缓冲区 04-23 19:41:11.951 1296-1962/? D/gralloc_ranchu:gralloc_alloc:格式 1 和用法 0x900 暗示 创建主机颜色缓冲区 04-23 19:41:11.968 1296-1426/? D/PermissionCache:检查 android.permission.READ_FRAME_BUFFER uid=1000 => 授予 (252 us) 04-23 19:41:12.025 1296-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 6856-6856/com.teslaqubitsins.fasih.teslahcm E/AndroidRuntime: 致命异常: main 进程:com.teslaqubitsins.fasih.teslahcm,PID:6856 java.lang.NullPointerException:尝试调用虚拟方法 'android.view.View android.view.View.findViewById(int)' 为空 对象引用 在 com.teslaqubitsins.fasih.teslahcm.LocationDetailFragment.onCreateView(LocationDetailFragment.java:35) 在 android.support.v4.app.Fragment.performCreateView(Fragment.java:2192) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 在 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) 在 android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 在 android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013) 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.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.gms.persistent W/GCoreFlp: getLastLocation() 04-23 19:58:42.534 没有返回位置 2134-2214/com.google.android.googlequicksearchbox:搜索 W/GmsLocationProvider:删除位置更新时出错:16

【问题讨论】:

  • 发布崩溃日志....
  • @rafsanahmad007。请检查。
  • 也发布您的LocationDetailFragment ..因为该类的异常关注
  • @rafsanahmad007。请立即检查。
  • @rafsanahmad007。另请注意,我正在从 ContactFragment 扩展的 Fragment 类中调用 onInfoWindowClick。我正在尝试从ContactFragment 拨打LocationDetailFragment

标签: java android google-maps android-fragments


【解决方案1】:

代替:

 _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 时发生异常,它与片段的View 无关。在fragment 中,您必须始终使用膨胀视图的引用。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多