android - 如何将字符串从 Activity 发送到 Fragment

标签 android android-fragments fragment android-fragmentactivity

我一直在开发一个应用程序,用户可以在其中登录一个 Activity ,并且会有一个包含“我的个人资料”、“主页”和“设置” fragment 的抽屉导航。在登录时,我传递了从数据库中检索到的帐户的“名称”和“电子邮件”,因此我可以将其显示在“我的个人资料” fragment 中,但我无法将登录 Activity 中检索到的名称传递给我的个人资料 fragment 。

来自登录 Activity 的代码

    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);
}

我总是得到 Error Null 对象引用

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)

谢谢,抱歉英语不好。

最佳答案

注意,你的fragment是在同一个activity中还是在不同的activity中。
根据您的问题,您的 fragment 代码在您尝试打印或获取字符串的错误方法函数 中,即使未创建view

覆盖 fragment 中的 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()

关于android - 如何将字符串从 Activity 发送到 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58951716/

相关文章:

android - 如何设置 flutter togglebuttons 小部件的宽度

安卓模拟器不显示任何东西

android - 不兼容的 fragment 类型

fragment 中的 Android onActivityResult

android - 在 fragment 中使用 tablayout 实现 recyclerview

android - unity添加sdk报 `no resources found`错误

java - 不获取联系人点击联系人它显示应用程序已停止

android - "Can not perform this action after onSaveInstanceState"- 为什么我从我的 Activity 的 onResume 方法中得到这个异常?

android - 如何更改 fragment 的状态栏颜色?

安卓 fragment 困惑