【问题标题】:Transfer data from Fragment Activity to Fragment将数据从 Fragment Activity 传输到 Fragment
【发布时间】:2013-07-26 09:30:08
【问题描述】:

我正在我的应用程序中使用蓝牙服务,该服务使我能够从另一台设备接收到消息。在我的 FragmentActivity 中,我正在使用处理程序来获取此消息:

片段活动:

  public final Handler mHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {

                  //my code

                  case MESSAGE_READ:
                         byte[] readBuf = (byte[]) msg.obj;
                         byte[] alpha = null;
                         alpha=readBuf;

                         if(alpha!=null){
                          //my code..
              }
        }
  }

我想从这个处理程序中获取数据并将其传输到片段。 我尝试使用 bundle 但它不起作用..

我试过的代码:

在 FragmentActivity 中:

    Intent intent = new Intent();
intent.setClass(getApplicationContext(), General.class);
Bundle bundle=new Bundle();
bundle.putInt("battery", bat);
intent.putExtra("android.intent.extra.INTENT", bundle);

在片段中:

Bundle bundle = getActivity().getIntent().getExtras();
if (bundle != null) {
int mLabel = bundle.getInt("battery", 0);
Toast.makeText(getActivity(), "tottiti: "+mLabel, Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getActivity(), "prout", Toast.LENGTH_SHORT).show();
}

应用程序返回“pout”,这意味着它无法从我的 FragmentActivity 获取我的数据。

还有其他方法可以从 fragmentActivity 获取数据并将其传输到 Fragment 吗?

感谢您的帮助

【问题讨论】:

    标签: android bundle fragment android-fragmentactivity


    【解决方案1】:

    假设您需要在创建时将数据传递给片段,您可以使用setArguments() 将数据传递给片段,并使用getArguments() 读取该数据。

    Bundle bundle = new Bundle();
    bundle.putInt("battery", bat);
    MyFragment fragment=new MyFragment();
    fragment.setArguments(bundle);
    
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.add(R.id.fragment_container,fragment);
    ft.commit();
    

    然后在片段的onCreate()方法中:

    Bundle bundle=getArguments(); 
    int mLabel = bundle.getInt("battery", 0);
    

    但是如果已经创建了片段,那么您可以在片段中创建一个用于传递数据的方法,如下所示:

    fragment.setBattery(bat);
    

    【讨论】:

    • 事实上,要获得我的电池数据,我必须使用我的选项菜单(在我的 FragmentActivity 中)中的一个按钮来获取连接设备的电池状态。然后在我的 Fragment 中有一个按钮,当我单击此按钮时,我希望我的程序获取我在 fragmentActivity 中获得的电池状态的值。我尝试了您的代码进行了一些更改,但它不起作用。
    • 我不能使用 ft.add(R.id.fragment_container,fragment);因为我还没有为我的片段定义一个 id。我无法在创建时获取数据,因为我需要使用我的按钮来获取这些数据..
    • 嗯..尝试将电池数据存储在活动中。在您的FragmentActivity 中有一个字段,当单击选项菜单时,会将数据存储在那里。然后,当单击 Fragment 中的按钮时,读取该字段:((MyActivity)getActivity()).getBatteryData()
    • 是否可以使用 getPreferences 来做到这一点?因为在我的选项菜单中,我已经将电池数据保存在 getPreferences 中: 在我的选项菜单中,我有: getPreferences(MODE_PRIVATE).edit().putString("passInfo", String.valueOf(bat)).commit();那么我可以在我的 Fragment 中获取这些数据吗?
    • 如果是这样,那么是的,您可能可以从 SharedPreferences 中读取 if。
    猜你喜欢
    • 2018-01-07
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多