【问题标题】:How to pass value from Activity to Fragment? [duplicate]如何将值从 Activity 传递到 Fragment? [复制]
【发布时间】:2014-01-10 05:55:01
【问题描述】:

目前这是我的Activity Class

Fragment fragment = null;
        switch (position) {
        case 0:
            fragment = new FragmentTripPlan();
            break;
        case 1:
            fragment = new FragmentCulturalHistorical();
            Toast.makeText(this, "cultural", Toast.LENGTH_SHORT).show();
            break;
        case 2:
            fragment = new FragmentLeisureRecreational();
            Toast.makeText(this, "Leisure", Toast.LENGTH_SHORT).show();

            break;
        case 3:
            fragment = new FragmentLipaChurches();
            break;
        case 4:
            fragment = new FragmentNaturalSite();
            Bundle bundle = new Bundle();
            bundle.putString("edttext", "From Activity");
            FragmentNaturalSite fragobj = new FragmentNaturalSite();
            fragobj.setArguments(bundle);
            break;
        case 5:
            fragment = new FragmentCreateReport();
            break;
        case 6:
            fragment = new FragmentAbout();
            break;

        default:
            break;

这是我的片段类

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_lipa_churches, container, false);   
    // ******* vvvvvv
    Bundle bundle = getArguments();
    String strtext = bundle .getString("edttext");
return rootView;
}

我在 Log Trace

中得到了这个错误
01-10 13:51:43.020: E/AndroidRuntime(13708): FATAL EXCEPTION: main
01-10 13:51:43.020: E/AndroidRuntime(13708): java.lang.NullPointerException
01-10 13:51:43.020: E/AndroidRuntime(13708):    at com.c4a.itravellipaph.FragmentLipaChurches.onCreateView(FragmentLipaChurches.java:26)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at android.app.Fragment.performCreateView(Fragment.java:1695)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at android.app.BackStackRecord.run(BackStackRecord.java:682)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1455)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at android.os.Handler.handleCallback(Handler.java:725)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at android.os.Handler.dispatchMessage(Handler.java:92)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at android.os.Looper.loop(Looper.java:137)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at android.app.ActivityThread.main(ActivityThread.java:5279)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at java.lang.reflect.Method.invokeNative(Native Method)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at java.lang.reflect.Method.invoke(Method.java:511)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
01-10 13:51:43.020: E/AndroidRuntime(13708):    at dalvik.system.NativeStart.main(Native Method)

问题。

  1. 我该如何解决这个问题?

  2. 如何将值或数据从活动传递到片段?

  3. 还有其他的传值方式吗?

【问题讨论】:

  • 我猜应该是fragment.setArguments(bundle);
  • @SBerg413 我认为不是。不过谢谢。
  • 检查这个我认为有帮助的链接(在片段中传递字符串)stackoverflow.com/questions/17875804/…

标签: java android android-fragments


【解决方案1】:

我不知道fragobj 是谁,但case 4 我认为你打错了,而不是:

FragmentLipaChurches fragobj = new FragmentLipaChurches();
fragobj.setArguments(bundle);

你应该有:

fragment.setArguments(bundle);

至少应该对FragmentLipaChurches 进行不同的处理,因为您在那里创建了FragmentNaturalSite 的实例,但您将参数设置为FragmentLipaChurches。所以FragmentNaturalSite 没有设置参数,这就是 NPE 的原因。

【讨论】:

  • 所以我还需要在我的代码中包含这个吗?还是我应该删除它? FragmentLipaChurches fragobj = new FragmentLipaChurches();
  • FragmentNaturalSite fragobj = new FragmentNaturalSite();fragobj.setArguments(bundle); 替换为 fragment.setArguments(bundle);
【解决方案2】:
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
           Bundle b = getActivity().getIntent().getExtras();
           String strtext = getArguments().getString("edttext");  
           View view = inflater.inflate(R.layout.categoryfragment, container, false);
           return view;
 }

【讨论】:

    【解决方案3】:

    从活动中传递价值使用这个

    Bundle bun = new Bundle();
    bun.putString("pathimage", path);
    fragment_setting.setArguments(bun);
    

    要获取 vlue,请在片段中的 onCreateView 中使用它

    Bundle b = getArguments();
    String path = b.getString("pathimage");
    

    【讨论】:

    • 我仍然得到同样的日志跟踪错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    相关资源
    最近更新 更多