使用MapView在片段之间切换 [英] Switch between fragments with MapView

查看:250
本文介绍了使用MapView在片段之间切换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个底部栏的main_activity。我正在使用此底部栏来浏览片段。但是,有一个片段不能通过底部栏直接导航。它必须可以从MapView的片段和 onInfoWindowClick 中访问。但是,每当我使用infoWindow时,应用程序崩溃。这是我的代码

I have a main_activity with a bottom bar. I am using this bottom bar to navigate between fragments. However, there's this one fragment that's not directly navigatable via that bottom bar. It must be accessible from the fragment with MapView and upon onInfoWindowClick. However, the app crashes whenever I consume the infoWindow. Here's my code

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

EXCEPTION:main
过程: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)
at
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
at
android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
at
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager。
at
android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
at
android.support.v4.app.FragmentManagerImpl。 executeOps(FRA
at
android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
at
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)
at 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)
at java.lang.reflect.Method.invoke(Native Method)
at
com.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 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
必须定义为构建属性

EXCEPTION: main Process: com.teslaqubitsins.fasih.teslahcm, PID: 2573 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference at com.teslaqubitsins.fasih.teslahcm.LocationDetailFragment.onCreateView(LocationDetailFragment.java:35) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.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 1564-1957/system_process W/ActivityManager: Force finishing activity com.teslaqubitsins.fasih.teslahcm/.MainActivity 04-23 19:41:11.414 1296-1653/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property

                                             [ 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:无法选择带$ b $的配置b 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:
的活动暂停超时ActivityRecord {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意味着
创建主机颜色缓冲区
Blockquote

19:41:11.457 1296-1653/? D/gralloc_ranchu: gralloc_alloc: format 1 and usage 0x900 imply creation of host color buffer 04-23 19:41:11.457 1564-3367/system_process I/OpenGLRenderer: Initialized EGL, version 1.4 04-23 19:41:11.458 1564-3367/system_process D/OpenGLRenderer: Swap behavior 1 04-23 19:41:11.458 1564-3367/system_process W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without... 04-23 19:41:11.458 1564-3367/system_process D/OpenGLRenderer: Swap behavior 0 04-23 19:41:11.462 1296-1653/? D/gralloc_ranchu: gralloc_alloc: format 1 and usage 0x900 imply creation of host color buffer 04-23 19:41:11.476 1296-1653/? D/gralloc_ranchu: gralloc_alloc: format 1 and usage 0x900 imply creation of host color buffer 04-23 19:41:11.892 1564-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 1296-1962/? D/gralloc_ranchu: gralloc_alloc: format 1 and usage 0x900 imply creation of host color buffer 04-23 19:41:11.940 1296-1962/? D/gralloc_ranchu: gralloc_alloc: format 1 and usage 0x900 imply creation of host color buffer 04-23 19:41:11.951 1296-1962/? D/gralloc_ranchu: gralloc_alloc: format 1 and usage 0x900 imply creation of host color buffer 04-23 19:41:11.968 1296-1426/? D/PermissionCache: checking android.permission.READ_FRAME_BUFFER for uid=1000 => granted (252 us) 04-23 19:41:12.025 1296-1426/? D/gralloc_ranchu: gralloc_alloc: format 1 and usage 0x333 imply creation of host color buffer Blockquote



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:致命异常:主
工序:com.teslaqubitsins.fasih.teslahcm,PID:6856
java.lang.NullPointerException:试图调用虚方法
'android.view.View android.view.View.findViewById(int)'对一个空
对象引用
at
'强> com.teslaqubitsins.fasih.teslahcm.LocationDetailFragment.onCreateView(LocationDetailFragment.java:35)是在
android.support.v4.app.Fragment.performCreateView
(片段.java:2192)

android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
at
android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
at
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
at
android.support.v4.app.BackStackRecord.executeOps(BackStackRecord。 java:758)
at
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)
at
android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
at
android.support.v4.app.FragmentManagerImpl $ 1.run(FragmentManager .java:710)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
在android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native法)
。在
$ 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

04-23 19:58:11.735 6856-6856/com.teslaqubitsins.fasih.teslahcm E/AndroidRuntime: FATAL EXCEPTION: main Process: com.teslaqubitsins.fasih.teslahcm, PID: 6856 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference at com.teslaqubitsins.fasih.teslahcm.LocationDetailFragment.onCreateView(LocationDetailFragment.java:35) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 04-23 19:58:12.507 2006-2282/com.google.android.gms.persistent W/GCoreFlp: No location to return for getLastLocation() 04-23 19:58:42.534 2134-2214/com.google.android.googlequicksearchbox:search W/GmsLocationProvider: Error removing location updates: 16


推荐答案



Instead of:

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

使用片段的充气视图来获取ID:

use the fragment's inflated view to get the ID's:

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

异常发生在您的 getView()返回null,它不与片段的 View 关联。在片段中,您必须始终使用虚拟视图的引用。

the exception occurs as your getView() returns null, it is not associated with the fragment's View. In fragment You have to always use the inflated view's reference.

这篇关于使用MapView在片段之间切换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆