【问题标题】:Not able to pass string value from one fragment to another [duplicate]无法将字符串值从一个片段传递到另一个片段[重复]
【发布时间】:2017-07-27 15:10:57
【问题描述】:

我知道这方面有很多问题,但没有一个能解决我的问题 我想将一个字符串变量从一个片段传递到另一个片段,这是我所做的代码。但我收到错误(我会显示错误)

从我做的第一个片段

Desc_1 ldf = new Desc_1 ();
Bundle args = new Bundle();
args.putString("YourKey", "YourValue");
ldf.setArguments(args);
getFragmentManager().beginTransaction().add(R.id.frame, ldf).commit();

以及我喜欢的第二个片段

public class Desc_1 extends Fragment {

    public Desc_1() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootview=inflater.inflate(R.layout.fragment_desc_1,container,false);

        String value = getArguments().getString("YourKey");

        Toast.makeText(getActivity(), value,
                Toast.LENGTH_LONG).show();

        return rootview;

    }
}

我收到类似的错误

07-27 20:31:06.386 26816-26816/com.example.jaison.newsclient E/AndroidRuntime: FATAL EXCEPTION: main
   Process: com.example.jaison.newsclient, PID: 26816
   java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
       at layout.Desc_1.onCreateView(Desc_1.java:34)
       at android.support.v4.app.Fragment.performCreateView(Fragment.java:2239)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1332)
       at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1574)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1641)
       at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:794)
       at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2415)
       at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2200)
       at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2153)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2063)
       at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:725)
       at android.os.Handler.handleCallback(Handler.java:815)
       at android.os.Handler.dispatchMessage(Handler.java:104)
       at android.os.Looper.loop(Looper.java:207)
       at android.app.ActivityThread.main(ActivityThread.java:5769)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:861)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)

【问题讨论】:

    标签: java android string android-fragments


    【解决方案1】:

    试试这个:

    Bundle bundle = getArguments();
    if(bundle != null)
        String value = bundle.getString("YourKey");
    

    【讨论】:

    • 你能解释一下为什么会这样吗?
    • 获取您发送的Bundle 并测试id 如果没有获取数据则为空
    【解决方案2】:

    只需检查 getArguments() 在您的片段中是否不为空,然后在花括号内添加您的代码

    示例:

    Bundle bundle_arguments = getArguments();
    if(bundle_arguments != null) {
        // your code 
    } 
    

    【讨论】:

    • 你能发布答案吗
    • 你必须知道如何根据别人告诉你的东西来制作东西。从长远来看,给你一个完整的解决方案对你没有帮助:)
    【解决方案3】:

    请检查此答案以在片段之间传递值

    https://stackoverflow.com/a/27626004/5065318

    【讨论】:

    • 如果您认为该问题之前已被提出并回答,则应将该问题标记为重复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2020-05-31
    • 1970-01-01
    • 2016-06-12
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多