社区首页 >问答首页 >如何从片段和数据中调用片段

如何从片段和数据中调用片段
EN

Stack Overflow用户
提问于 2013-10-21 21:52:27
回答 2查看 1.1K关注 0票数 0

早些时候,我使用下面的代码从片段和数据调用活动:

ListCategoryFragment.java :

代码语言:javascript
代码运行次数:0
复制
          case categoryFirst:
             Intent intent1 = new Intent(getActivity(), ListItemActivity.class);
             intent1.putExtra("category", "Category - 1");
             startActivity(intent1);    
           break;

ListItemActivity.java :

代码语言:javascript
代码运行次数:0
复制
    Bundle bdl = getActivity().getIntent().getExtras();
    KEY_CATEGORY = bdl.getString("category");

但是现在我从片段中调用片段,使用下面的代码:

ListCategoryFragment.java :

代码语言:javascript
代码运行次数:0
复制
private static final int categoryFirst = 0;

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {

    // Set up different intents based on the item clicked: 
    switch (position)
    {

           case categoryFirst:
                ListItemFragment fragment1 = new ListItemFragment();
                Bundle bundle = new Bundle();
                bundle.putString("category", "Category - 1");
                fragment1.setArguments(bundle);
                FragmentManager fragmentManager = getFragmentManager();
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
               fragmentTransaction.replace(android.R.id.content, fragment1);
                fragmentTransaction.commit();
             break;

           default:
             break;
    }

ListItemFragment.java :

代码语言:javascript
代码运行次数:0
复制
        Bundle bdl = getActivity().getIntent().getExtras();
        KEY_CATEGORY = bdl.getString("category");  // Line No. - 67

日志显示:

代码语言:javascript
代码运行次数:0
复制
10-22 02:06:06.930: W/dalvikvm(914): threadid=1: thread exiting with uncaught exception (group=0x41465700)
10-22 02:06:06.959: E/AndroidRuntime(914): FATAL EXCEPTION: main
10-22 02:06:06.959: E/AndroidRuntime(914): java.lang.NullPointerException
10-22 02:06:06.959: E/AndroidRuntime(914):  at com.androidbegin.absviewpagertutorial.ListItemFragment.onCreateView(ListItemFragment.java:67)
10-22 02:06:06.959: E/AndroidRuntime(914):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:870)
10-22 02:06:06.959: E/AndroidRuntime(914):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
10-22 02:06:06.959: E/AndroidRuntime(914):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
10-22 02:06:06.959: E/AndroidRuntime(914):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
10-22 02:06:06.959: E/AndroidRuntime(914):  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
10-22 02:06:06.959: E/AndroidRuntime(914):  at android.os.Handler.handleCallback(Handler.java:730)
10-22 02:06:06.959: E/AndroidRuntime(914):  at android.os.Handler.dispatchMessage(Handler.java:92)
10-22 02:06:06.959: E/AndroidRuntime(914):  at android.os.Looper.loop(Looper.java:137)
10-22 02:06:06.959: E/AndroidRuntime(914):  at android.app.ActivityThread.main(ActivityThread.java:5103)
10-22 02:06:06.959: E/AndroidRuntime(914):  at java.lang.reflect.Method.invokeNative(Native Method)
10-22 02:06:06.959: E/AndroidRuntime(914):  at java.lang.reflect.Method.invoke(Method.java:525)
10-22 02:06:06.959: E/AndroidRuntime(914):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-22 02:06:06.959: E/AndroidRuntime(914):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-22 02:06:06.959: E/AndroidRuntime(914):  at dalvik.system.NativeStart.main(Native Method)
10-22 02:06:09.900: I/Process(914): Sending signal. PID: 914 SIG: 9
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-21 22:14:21

我希望您正在寻找通过包将数据从一个片段发送到另一个片段。

代码语言:javascript
代码运行次数:0
复制
Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);

Bundle已经为许多数据类型提供了方法。请参阅http://developer.android.com/reference/android/os/Bundle.html

然后,在您的片段中,使用以下方法检索数据(例如,在onCreate()中):

代码语言:javascript
代码运行次数:0
复制
Bundle bundle = this.getArguments();
int myInt = bundle.getInt(key, defaultValue);
票数 2
EN

Stack Overflow用户

发布于 2013-10-21 22:05:20

若要将数据发送到ListItemFragment,请执行以下操作:

代码语言:javascript
代码运行次数:0
复制
String s = getArguments().getString("category");

要正确创建ListItemFragment:

代码语言:javascript
代码运行次数:0
复制
getFragmentManager().beginTransaction().replace(R.id.content_frame, fragment1).commit();

应该能正常工作。我还没有专门测试过这个。您的代码没有切换片段,因为您从未调用替换()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19509982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文