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)