将数据从 Fragment Activity 传输到 Fragment

Posted

技术标签:

【中文标题】将数据从 Fragment Activity 传输到 Fragment【英文标题】:Transfer data from Fragment Activity to 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 吗?

感谢您的帮助

【问题讨论】:

【参考方案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。

以上是关于将数据从 Fragment Activity 传输到 Fragment的主要内容,如果未能解决你的问题,请参考以下文章

Android学习——Fragment与Activity通信

将数据从 Activity 传递到已附加的 Fragment 的方法

如何将数据从 Activity 发送到 Fragment

如何将数据从 Activity 传递到已创建的 Fragment?

android - 将数据从 Activity 传递到 ViewPager 中的 Fragment

从 Activity 的 Fragment 中保存数据