首页 \ 问答 \ 在Tab Activity的onCreate中,在Android中的ActionBar选项卡框架中初始化值(Initializing value to views in ActionBar Tab framents in android while onCreate of Tab Activity)

在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方法将值初始化为片段NetworkFragmentRemoteUserFragment 。 为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
更新时间:2024-04-06 14:04

相关文章

更多

最新问答

更多
  • h2元素推动其他h2和div。(h2 element pushing other h2 and div down. two divs, two headers, and they're wrapped within a parent div)
  • 创建一个功能(Create a function)
  • 我投了份简历,是电脑编程方面的学徒,面试时说要培训三个月,前面
  • PDO语句不显示获取的结果(PDOstatement not displaying fetched results)
  • Qt冻结循环的原因?(Qt freezing cause of the loop?)
  • TableView重复youtube-api结果(TableView Repeating youtube-api result)
  • 如何使用自由职业者帐户登录我的php网站?(How can I login into my php website using freelancer account? [closed])
  • SQL Server 2014版本支持的最大数据库数(Maximum number of databases supported by SQL Server 2014 editions)
  • 我如何获得DynamicJasper 3.1.2(或更高版本)的Maven仓库?(How do I get the maven repository for DynamicJasper 3.1.2 (or higher)?)
  • 以编程方式创建UITableView(Creating a UITableView Programmatically)
  • 如何打破按钮上的生命周期循环(How to break do-while loop on button)
  • C#使用EF访问MVC上的部分类的自定义属性(C# access custom attributes of a partial class on MVC with EF)
  • 如何获得facebook app的publish_stream权限?(How to get publish_stream permissions for facebook app?)
  • 如何防止调用冗余函数的postgres视图(how to prevent postgres views calling redundant functions)
  • Sql Server在欧洲获取当前日期时间(Sql Server get current date time in Europe)
  • 设置kotlin扩展名(Setting a kotlin extension)
  • 如何并排放置两个元件?(How to position two elements side by side?)
  • 如何在vim中启用python3?(How to enable python3 in vim?)
  • 在MySQL和/或多列中使用多个表用于Rails应用程序(Using multiple tables in MySQL and/or multiple columns for a Rails application)
  • 如何隐藏谷歌地图上的登录按钮?(How to hide the Sign in button from Google maps?)
  • Mysql左连接旋转90°表(Mysql Left join rotate 90° table)
  • dedecms如何安装?
  • 在哪儿学计算机最好?
  • 学php哪个的书 最好,本人菜鸟
  • 触摸时不要突出显示表格视图行(Do not highlight table view row when touched)
  • 如何覆盖错误堆栈getter(How to override Error stack getter)
  • 带有ImageMagick和许多图像的GIF动画(GIF animation with ImageMagick and many images)
  • USSD INTERFACE - > java web应用程序通信(USSD INTERFACE -> java web app communication)
  • 电脑高中毕业学习去哪里培训
  • 正则表达式验证SMTP响应(Regex to validate SMTP Responses)