1

I'm using ViewSwitcher to move between two layout and if user switch multiple time app is crashing and giving java.lang.NullPointerException.This error gives when user move landscape to portrait also via and switch multiple time switch between two layout.

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        Display d =getActivity().getWindowManager().getDefaultDisplay();
        final int w = d.getWidth();
        final int h = d.getHeight();
        final double ar = w > h ? (double) w / (double) h : (double) h / (double) w;

        this.container = container;
        rootView = inflater.inflate(R.layout.fragment_remote_port, container, false);
        viewSwitcher =(ViewSwitcher)rootView.findViewById(R.id.remote_viewswitcher);

        if (ar > 1.6) {
            Log.i(TAG, "AR = " + ar + ", using extended layout.");
            remoteGesture = inflater.inflate(R.layout.remoteGesture_extended, null);
            remoteNav = inflater.inflate(R.layout.remoteNav_extended, null);
        } else {
            Log.i(TAG, "AR = " + ar + ", normal layout.");
            remoteGesture = inflater.inflate(R.layout.remoteGesture, null);
            remoteNav = inflater.inflate(R.layout.remoteNav, null);
        }

        viewSwitcher.addView(remoteNav);
        viewSwitcher.addView(remoteGesture);
        setupButtons(rootView);
        return rootView;

    }

I'm using onConfigurationChanged method

@Override
public void onConfigurationChanged(Configuration newConfig) {
    LayoutInflater inflater = LayoutInflater.from(getActivity());
    viewSwitcher.removeAllViews();
    container=(ViewGroup) getView();
    //rootView = inflater.inflate(R.layout.fragment_remote_port, container, false);
    //viewSwitcher =(ViewSwitcher)rootView.findViewById(R.id.remote_viewswitcher);
    Display d =getActivity().getWindowManager().getDefaultDisplay();
    final int w = d.getWidth();
    final int h = d.getHeight();
    final double ar = w > h ? (double) w / (double) h : (double) h / (double) w;

    if (ar > 1.6) {
        Log.i(TAG, "AR = " + ar + ", using extended layout.");
        remoteGesture = inflater.inflate(R.layout.remoteGesture_extended, null);
        remoteNav = inflater.inflate(R.layout.remoteGesture, null);
    } else {
        Log.i(TAG, "AR = " + ar + ", normal layout.");
        remoteGesture = inflater.inflate(R.layout.remoteGesture, null);
        remoteNav = inflater.inflate(R.layout.remote, null);
    }

    viewSwitcher.addView(remoteNav);
    viewSwitcher.addView(remoteGesture);
    setupButtons(rootView);

    super.onConfigurationChanged(newConfig);
}

I'm switching the two layout like this

 private void setupGestureButton(View button){
    if(button == null) return;
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setupButtons(viewSwitcher.getNextView());
            viewSwitcher.showNext();
        }
    });
}

This is the NullPointerException that I got from the Error log

12-17 10:49:58.104  17217-17217/au.com.bo.android.eco E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: au.com.bo.android.eco, PID: 17217
java.lang.NullPointerException
        at au.com.bo.android.eco.remotecontroller.RemoteFragment.setUpTouchPad(RemoteFragment.java:406)
        at au.com.bo.android.eco.remotecontroller.RemoteFragment.setupButtons(RemoteFragment.java:305)
        at au.com.bo.android.eco.remotecontroller.RemoteFragment.access$100(RemoteFragment.java:45)
        at au.com.bo.android.eco.remotecontroller.RemoteFragment$2.onClick(RemoteFragment.java:358)
        at android.view.View.performClick(View.java:4626)
        at android.view.View$PerformClick.run(View.java:19221)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:157)
        at android.app.ActivityThread.main(ActivityThread.java:5356)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
        at dalvik.system.NativeStart.main(Native Method)
Nuwan Indika
  • 901
  • 4
  • 14
  • 27

0 Answers0