在Tab Activity的onCreate中,在Android中的ActionBar选项卡框架中初始化值(Initializing value to views in ActionBar Tab framents in android while onCreate of Tab Activity)
我的应用程序使用ActionBar选项卡片段来创建/修改设备详细信息。 Device属性分为不同的片段。 我想在Tab Activity的OnCreate中初始化每个片段。 在每个选项卡片段中都有SetValues方法,该方法初始化要在片段中查看的值。 我注意到当我点击特定标签时会创建片段。
标签活动
public class CameraDetails extends Activity { private CameraData camera = new CameraData(); Fragment network = new NetworkFragment(); Fragment remoteUser = new RemoteUserFragment(); private G.Interface mNetworkInterface = null; private G.Interface mRemoteUserInterface = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.cameradetails); ActionBar actionBar = getActionBar(); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayShowTitleEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // network tab ActionBar.Tab tab = actionBar.newTab(); tab.setText("Network"); tab.setIcon(R.drawable.ic_launcher); tab.setTabListener(new TabListener(network)); actionBar.addTab(tab); // remote user tab tab = actionBar.newTab(); tab.setText("Remote User"); tab.setIcon(R.drawable.ic_launcher); tab.setTabListener(new TabListener(remoteUser)); actionBar.addTab(tab); final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { init(); } }, 1000); } public void init(){ try{ byte[] by = new byte[512]; String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); File file = new File(extStorageDirectory, "dump.hex"); BufferedInputStream in = new BufferedInputStream( new FileInputStream(file)); in.read(by); in.close(); camera.set( by ); mNetworkInterface.SetValues(); mRemoteUserInterface.SetValues(); } catch(Exception e){ e.printStackTrace(); } } public CameraData getCameraData(){ return camera; } public void setNetworkListener( G.Interface Interface ){ this.mNetworkInterface = Interface; } public void setRemoteUserListener( G.Interface Interface ){ this.mRemoteUserInterface = Interface; } }
片段选项卡之一
public class NetworkFragment extends Fragment implements G.Interface { View rootView; Activity mActivity; CameraData camera; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.network_layout, container, false); Log.i("NetworkFragment", "CreateView"); return rootView; } @Override public void onAttach(Activity activity) { mActivity = activity; ((CameraDetails)mActivity).setNetworkListener(this); camera = ((CameraDetails)mActivity).getCameraData(); Log.i("NetworkFragment", "Activity Attached"); super.onAttach(activity); } @Override public void SetValues() { try { // ip address EditText et = (EditText)rootView.findViewById(R.id.cd_ip_address); et.setText(camera.mNetwork.IPAddress); // subnet mask et = (EditText)rootView.findViewById(R.id.cd_subnetmask); et.setText(camera.mNetwork.SubnetMask); // gateway et = (EditText)rootView.findViewById(R.id.cd_gateway); et.setText(camera.mNetwork.Gateway); // com port et = (EditText)rootView.findViewById(R.id.cd_comm_port); et.setText(""+camera.mNetwork.CommPort); // mimg port et = (EditText)rootView.findViewById(R.id.cd_mimg_port); et.setText(""+camera.mNetwork.MImgPort); // webserver port et = (EditText)rootView.findViewById(R.id.cd_web_server_port); et.setText(""+camera.mNetwork.WebServerPort); // wifi id et = (EditText)rootView.findViewById(R.id.cd_wifi_id); et.setText(camera.mNetwork.WiFiId); // wifi password et = (EditText)rootView.findViewById(R.id.cd_wifi_pwd); et.setText(camera.mNetwork.WiFiPassword); // wifi mode Spinner sp = (Spinner)rootView.findViewById(R.id.cd_wifi_mode); sp.setSelection(camera.mNetwork.WiFiMode, true); Log.i("NetworkFragment", "SetValues OK"); } catch( Exception e ){ } } }
选项卡活动的Init方法将值初始化为片段NetworkFragment和RemoteUserFragment 。 为NetworkFragment初始化值。 但是RemoteUserFragment的NullPointerException。
logcat的
06-11 12:06:38.161: W/System.err(677): java.lang.NullPointerException 06-11 12:06:38.201: W/System.err(677): at com.mtxlabs.cameraviewer.CameraDetails.init(CameraDetails.java:114) 06-11 12:06:38.201: W/System.err(677): at com.mtxlabs.cameraviewer.CameraDetails$1.run(CameraDetails.java:98) 06-11 12:06:38.201: W/System.err(677): at android.os.Handler.handleCallback(Handler.java:615) 06-11 12:06:38.211: W/System.err(677): at android.os.Handler.dispatchMessage(Handler.java:92) 06-11 12:06:38.211: W/System.err(677): at android.os.Looper.loop(Looper.java:137) 06-11 12:06:38.211: W/System.err(677): at android.app.ActivityThread.main(ActivityThread.java:4745) 06-11 12:06:38.211: W/System.err(677): at java.lang.reflect.Method.invokeNative(Native Method) 06-11 12:06:38.211: W/System.err(677): at java.lang.reflect.Method.invoke(Method.java:511) 06-11 12:06:38.211: W/System.err(677): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 06-11 12:06:38.211: W/System.err(677): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 06-11 12:06:38.211: W/System.err(677): at dalvik.system.NativeStart.main(Native Method)
我该如何解决这个问题,或者是否使用其他技术来解决这个问题。
谢谢
My App uses ActionBar Tab Fragments to Create/Modify Device Details. The Device properties of categorized into different fragments. I want to initialize each fragments in OnCreate of Tab Activity. In each tab fragment has SetValues method which initializes values to view in the fragment. I noticed that fragment is created when i clicked on particular Tab.
Tab Activity
public class CameraDetails extends Activity { private CameraData camera = new CameraData(); Fragment network = new NetworkFragment(); Fragment remoteUser = new RemoteUserFragment(); private G.Interface mNetworkInterface = null; private G.Interface mRemoteUserInterface = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.cameradetails); ActionBar actionBar = getActionBar(); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayShowTitleEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // network tab ActionBar.Tab tab = actionBar.newTab(); tab.setText("Network"); tab.setIcon(R.drawable.ic_launcher); tab.setTabListener(new TabListener(network)); actionBar.addTab(tab); // remote user tab tab = actionBar.newTab(); tab.setText("Remote User"); tab.setIcon(R.drawable.ic_launcher); tab.setTabListener(new TabListener(remoteUser)); actionBar.addTab(tab); final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { init(); } }, 1000); } public void init(){ try{ byte[] by = new byte[512]; String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); File file = new File(extStorageDirectory, "dump.hex"); BufferedInputStream in = new BufferedInputStream( new FileInputStream(file)); in.read(by); in.close(); camera.set( by ); mNetworkInterface.SetValues(); mRemoteUserInterface.SetValues(); } catch(Exception e){ e.printStackTrace(); } } public CameraData getCameraData(){ return camera; } public void setNetworkListener( G.Interface Interface ){ this.mNetworkInterface = Interface; } public void setRemoteUserListener( G.Interface Interface ){ this.mRemoteUserInterface = Interface; } }
one of the fragment tab
public class NetworkFragment extends Fragment implements G.Interface { View rootView; Activity mActivity; CameraData camera; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.network_layout, container, false); Log.i("NetworkFragment", "CreateView"); return rootView; } @Override public void onAttach(Activity activity) { mActivity = activity; ((CameraDetails)mActivity).setNetworkListener(this); camera = ((CameraDetails)mActivity).getCameraData(); Log.i("NetworkFragment", "Activity Attached"); super.onAttach(activity); } @Override public void SetValues() { try { // ip address EditText et = (EditText)rootView.findViewById(R.id.cd_ip_address); et.setText(camera.mNetwork.IPAddress); // subnet mask et = (EditText)rootView.findViewById(R.id.cd_subnetmask); et.setText(camera.mNetwork.SubnetMask); // gateway et = (EditText)rootView.findViewById(R.id.cd_gateway); et.setText(camera.mNetwork.Gateway); // com port et = (EditText)rootView.findViewById(R.id.cd_comm_port); et.setText(""+camera.mNetwork.CommPort); // mimg port et = (EditText)rootView.findViewById(R.id.cd_mimg_port); et.setText(""+camera.mNetwork.MImgPort); // webserver port et = (EditText)rootView.findViewById(R.id.cd_web_server_port); et.setText(""+camera.mNetwork.WebServerPort); // wifi id et = (EditText)rootView.findViewById(R.id.cd_wifi_id); et.setText(camera.mNetwork.WiFiId); // wifi password et = (EditText)rootView.findViewById(R.id.cd_wifi_pwd); et.setText(camera.mNetwork.WiFiPassword); // wifi mode Spinner sp = (Spinner)rootView.findViewById(R.id.cd_wifi_mode); sp.setSelection(camera.mNetwork.WiFiMode, true); Log.i("NetworkFragment", "SetValues OK"); } catch( Exception e ){ } } }
Init method of tab activity initializes the values into fragment NetworkFragment and RemoteUserFragment. The values are initialized for NetworkFragment. But NullPointerException for RemoteUserFragment.
LOGCAT
06-11 12:06:38.161: W/System.err(677): java.lang.NullPointerException 06-11 12:06:38.201: W/System.err(677): at com.mtxlabs.cameraviewer.CameraDetails.init(CameraDetails.java:114) 06-11 12:06:38.201: W/System.err(677): at com.mtxlabs.cameraviewer.CameraDetails$1.run(CameraDetails.java:98) 06-11 12:06:38.201: W/System.err(677): at android.os.Handler.handleCallback(Handler.java:615) 06-11 12:06:38.211: W/System.err(677): at android.os.Handler.dispatchMessage(Handler.java:92) 06-11 12:06:38.211: W/System.err(677): at android.os.Looper.loop(Looper.java:137) 06-11 12:06:38.211: W/System.err(677): at android.app.ActivityThread.main(ActivityThread.java:4745) 06-11 12:06:38.211: W/System.err(677): at java.lang.reflect.Method.invokeNative(Native Method) 06-11 12:06:38.211: W/System.err(677): at java.lang.reflect.Method.invoke(Method.java:511) 06-11 12:06:38.211: W/System.err(677): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 06-11 12:06:38.211: W/System.err(677): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 06-11 12:06:38.211: W/System.err(677): at dalvik.system.NativeStart.main(Native Method)
How can i solve this problem or Is other technique is used to do it.
Advance thanks
原文:https://stackoverflow.com/questions/37760706