android - 如何将字符串从 Activity 发送到 Fragment
问题描述
我一直在开发一个应用程序,用户将登录到一个活动,并且会有一个包含“我的个人资料”“主页”和“设置”片段的导航抽屉。在登录时,我正在传递从数据库中检索到的帐户的“名称”和“电子邮件”,因此我可以将其显示在“我的个人资料”片段中,但我无法将在登录活动中检索到的名称传递给我的个人资料分段。
来自登录活动的代码
Bundle bundle = new Bundle();
bundle.putString("first", extraName);
ProfileFragment myProfile = new ProfileFragment();
myProfile.setArguments(bundle);
ProfileFragment 中的代码
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
String name = bundle.getString("first");
Log.i("PASSED: ","hello " + name);
Toast.makeText(getActivity(),"Hello " + name, Toast.LENGTH_SHORT);
return inflater.inflate(R.layout.fragment_js_profile, container, false);
}
我总是得到错误空对象引用
Process: com.example.myapplication, PID: 31888
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
at com.example.myapplication.JobSeeker.ProfileFragment.onCreateView(ProfileFragment.java:27)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2439)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
谢谢,抱歉英语不好。
解决方案
提一下,您的片段在相同的活动中或在不同的活动中。
根据您的问题,您的片段代码位于您尝试打印或获取字符串的错误方法或函数view
中,即使没有创建。
override onActivityCreated()
方法在您的片段中,并将这些代码行放入其中。
Bundle bundle = this.getArguments();
String name = bundle.getString("first");
Log.i("PASSED: ","hello " + name);
Toast.makeText(getActivity(),"Hello " + name, Toast.LENGTH_SHORT);
并且不要打扰您的onCreateView()
方法中的任何内容,只需在这些代码行上方剪切并粘贴到onActivityCreated()
推荐阅读
- python - 从列表中删除单个项目
- python - 更新小部件时,您何时*不需要*使用 grid_forget?
- chef-infra - 我可以在 Windows 10 平台上使用 Chef Infra 验证驱动程序、服务和环境变量吗?
- c - 线程 1 收到信号 SIGSEGV,Segmentation fault
- c++ - Visual Studio Code 中的 C++ 链接和编译问题
- python - 如何子类化 Django TextChoices 以添加其他属性?
- ios - iOS 14 小部件闪烁或冻结,chronod 崩溃
- json - 解码 JSON - nil 结果,没有错误
- java - 数组的抽象?
- git - 我无法在 VSCode 中进行更改