将数据从 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?