将数据传递到加碎片 - IlligalStateException:碎片已激活 [英] Passing data to added Fragment - IlligalStateException: Fragment already active

查看:157
本文介绍了将数据传递到加碎片 - IlligalStateException:碎片已激活的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个片段是积极的,并显示在平板电脑上并排。我需要从碎裂通过一些数据,当用户在碎裂列表视图中选择一个项目fragmentB。试图从该活动的数据fragmentB时出现我的问题。我得到的错误:IlligalStateException:碎片已激活

我通过从活动的数据是这样的:

  @覆盖
    公共无效onTrackSelected(字符串的TrackID){        topBarFragment topBarFragment =(topBarFragment)getSupportFragmentManager()findFragmentById(R.id.topBar_fragment)。        束束=新包();
        bundle.putString(的TrackID的TrackID);
        //设置Fragmentclass参数
        topBarFragment.setArguments(包);        topBarFragment.onTrackSelected();    }

然后接受fragmentB是这样的:

 公共无效onTrackSelected(){        字符串的TrackID = getArguments()的getString(的TrackID);
        Toast.makeText(getActivity()getApplicationContext(),的TrackID,Toast.LENGTH_SHORT).show();    }
}

logcat的:

  2月2日至25日:58:22.190:E / AndroidRuntime(29593):致命异常:主要
2月2日至25日:58:22.190:E / AndroidRuntime(29593):java.lang.IllegalStateException:碎片已激活
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在android.support.v4.app.Fragment.setArguments(Fragment.java:500)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在com.harteg.fragmentstest.ItemListActivity.onTrackSelected(ItemListActivity.java:88)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在com.harteg.fragmentstest.TracksFragment.onListItemClick(TracksFragment.java:136)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在android.support.v4.app.ListFragment $ 2.onItemClick(ListFragment.java:58)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在android.widget.AdapterView.performItemClick(AdapterView.java:298)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在android.widget.AbsListView.performItemClick(AbsListView.java:1100)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在android.widget.AbsListView $ PerformClick.run(AbsListView.java:2749)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在android.widget.AbsListView $ 1.run(AbsListView.java:3423)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在android.os.Handler.handleCallback(Handler.java:725)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在android.os.Handler.dispatchMessage(Handler.java:92)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在android.os.Looper.loop(Looper.java:137)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在android.app.ActivityThread.main(ActivityThread.java:5039)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在java.lang.reflect.Method.invokeNative(本机方法)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在java.lang.reflect.Method.invoke(Method.java:511)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
2月2日至25日:58:22.190:E / AndroidRuntime(29593):在dalvik.system.NativeStart.main(本机方法)


解决方案

您不能改变你传递给它的片段已经被创建后的参数。你应该做的仅仅是传递数据在你的方法调用,如:

  topBarFragment.onTrackSelected(的TrackID);

和使用它在你的片段:

 公共无效onTrackSelected(INT的TrackID){
  Toast.makeText(getActivity()getApplicationContext(),将String.valueOf(的TrackID),Toast.LENGTH_SHORT).show();
}

有关详细信息,看一看文档这里如何处理片段之间的通信

I have 2 fragments which is active and showing side by side on a tablet. I need to pass some data from fragmentA to fragmentB when user selects an item from a listview in fragmentA. My problem occurs when trying to get the data from the activity to fragmentB. I'm getting the error: IlligalStateException: Fragment already active.

I pass the data from activity like this:

    @Override
    public void onTrackSelected(String trackId) {

        topBarFragment topBarFragment = (topBarFragment)getSupportFragmentManager().findFragmentById(R.id.topBar_fragment);

        Bundle bundle = new Bundle();
        bundle.putString("trackId", trackId);
        //set Fragmentclass Arguments
        topBarFragment.setArguments(bundle);

        topBarFragment.onTrackSelected();

    }

And then receive in fragmentB like this:

public void onTrackSelected() {

        String trackId = getArguments().getString("trackId");
        Toast.makeText(getActivity().getApplicationContext(), trackId,Toast.LENGTH_SHORT).show();

    }   
}

Logcat:

02-25 02:58:22.190: E/AndroidRuntime(29593): FATAL EXCEPTION: main
02-25 02:58:22.190: E/AndroidRuntime(29593): java.lang.IllegalStateException: Fragment already active
02-25 02:58:22.190: E/AndroidRuntime(29593):    at android.support.v4.app.Fragment.setArguments(Fragment.java:500)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at com.harteg.fragmentstest.ItemListActivity.onTrackSelected(ItemListActivity.java:88)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at com.harteg.fragmentstest.TracksFragment.onListItemClick(TracksFragment.java:136)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at android.support.v4.app.ListFragment$2.onItemClick(ListFragment.java:58)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at android.widget.AdapterView.performItemClick(AdapterView.java:298)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at android.widget.AbsListView$1.run(AbsListView.java:3423)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at android.os.Handler.handleCallback(Handler.java:725)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at android.os.Looper.loop(Looper.java:137)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at android.app.ActivityThread.main(ActivityThread.java:5039)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at java.lang.reflect.Method.invokeNative(Native Method)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at java.lang.reflect.Method.invoke(Method.java:511)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-25 02:58:22.190: E/AndroidRuntime(29593):    at dalvik.system.NativeStart.main(Native Method)

解决方案

You can't change the arguments you passed to the fragment after it has been created. What you should do is just pass the data in your method call, like this:

topBarFragment.onTrackSelected(trackId);

And use it on your fragment:

public void onTrackSelected(int trackId) {
  Toast.makeText(getActivity().getApplicationContext(), String.valueOf(trackId),Toast.LENGTH_SHORT).show();
}

For more information have a look at the documentation here on how to handle communication between fragments.

这篇关于将数据传递到加碎片 - IlligalStateException:碎片已激活的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆