调用Fragment方法时的空对象引用

时间:2018-10-05 00:27:43

标签: java android

我收到此错误:

    Attempt to invoke virtual method 'void com.example.standa.vecerkaFirestore.MapFragment.testMethod()' 
on a null object reference

当我在片段中调用该方法时,一切工作正常,但是当我从另一个活动中调用该方法时,它将抛出空指针。

为什么会这样?

我从中调用方法的活动代码

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.botton_sheet_layout, container, false);
    final MapFragment frg = (MapFragment)
            getFragmentManager().findFragmentById(R.id.map);

    final Switch switch_open = v.findViewById(R.id.switch_open);

    switch_open.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (switch_open.isChecked()){
                frg.testMethod();

            }else{

            }
        }
    });

这是地图Fragment的代码:

   public class MapFragment extends Fragment implements OnMapReadyCallback {
    public void onMapReady(GoogleMap googleMap) {

    public void testMethod(){
        double longitude = 14.450388;//location.getLongitude();
        double latitude =50.085913;// location.getLatitude();
        LatLng testerloc=new LatLng(latitude,longitude);

        map.addMarker(new MarkerOptions().position(testerloc).title("yesCardOpen").snippet(""));


    }
}
}

我只包括测试方法。

1 个答案:

答案 0 :(得分:0)

getFragmentManager()获取当前活动的fragmentManager。这就是为什么它返回null的原因。

您可能应该做的是创建一个Listener,以将第二个活动与地图片段进行通信。