android - 使用 Bundle 将数据从 Fragment 传输到 Fragment,并使用相同的密钥从另一个 Fragment 读取数据
问题描述
我的应用程序中有 4 个片段。在First
基于某些条件的片段上,我将数据从片段传输First
到Third
或Fourth
。我正在传递数据,并在Bundles
整个片段中使用相同的键名读取数据。但我无法接收从其他屏幕发送的片段发送的数据。这是使用来自 Fragment
的条件和发送数据的代码Bundle
First
saveSession.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(feedbackAction.equals("rating_good")) {
bundle.putString("id", myId);
bundle.putString("No", no);
fdb.setArguments(bundle);
tx = fm.beginTransaction();
tx.replace(R.id.frame,fdb);
tx.addToBackStack("TabInfo");
tx.commit();
} else if(feedbackAction.equals("rating_bad")) {
bundle.putString("id", myId);
bundle.putString("No", no);
fdb.setArguments(bundle);
tx = fm.beginTransaction();
tx.replace(R.id.frame,bfd);
tx.addToBackStack("TabInfo");
tx.commit();
}
}
});
Second
这是从Fragment 检索数据的代码
id=getArguments().getString("id");
my_no=getArguments().getString("No");
Fourth
这是从片段 中检索数据的代码
id=getArguments().getString("id");
my_no=getArguments().getString("No");
但是我收到错误,因为
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.BaseBundle.getString(java.lang.String)' on a null object reference
如何使用相同的键在其他片段中检索此 Bundle 数据?
解决方案
作为一般规则,您可以遵循,为 ui 使用片段并处理片段,活动中的活动更改。您可以做的是创建一个接口并在使用这样的片段的活动中实现该接口。
public interface OnActionClickedListener {
void onSessionClicked(String name);
}
在您的片段中,您需要初始化此侦听器。
OnActionClickedListener onActionClickedListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
onActionClickedListener = (MyFragment.OnActionClickedListener) context;
} catch (Exception e) {
throw new ClassCastException();
}
}
现在在片段上的 onClickListener 中,您可以调用
onActionClickedlistener.onSessionClicked("string you want to enter");
最后,您的活动应该扩展 MyFragment.OnActionClickedListener 并实现 onSessionClicked 方法,您将在其中更改显示的片段。您可以轻松地从片段中获取活动中的数据。这样,如果另一个活动使用您的片段,该活动也可以根据需要实现 onActionClickedListener。
推荐阅读
- r - 在 R 中获取 cpp 代码时,在构建共享库时发生错误 1
- json - 如何在 Oracle 19C 中使用小写列名从 JSON_OBJECT 返回结果
- asp.net-mvc - 通过 jQuery AJAX 将对象数组传递给控制器,操作数据在 ASP.NET Core 2.2 MVC 中始终为空 - 它适用于 .NET Framework 4.5
- postgresql - codeigniter 与 postgresql 数据库连接
- excel - 基于 excel 数据 Sharepoint 2013 创建文档集
- android - 应用已发布但 2 周后未在 Google Play 中编入索引
- angular - 是否有为 @Input 属性使用角括号绑定表示法的约定?
- java - 如何在 Mono.subscribe 中使用 UI.getCurrent().navigate("route")
- ruby-on-rails - 在 coalesce-d id 上使用自定义联接时访问关联记录
- python - 使用 *arg in 为 pandas 列赋值