早些时候,我使用下面的代码从片段和数据调用活动:
ListCategoryFragment.java :
case categoryFirst:
Intent intent1 = new Intent(getActivity(), ListItemActivity.class);
intent1.putExtra("category", "Category - 1");
startActivity(intent1);
break;
ListItemActivity.java :
Bundle bdl = getActivity().getIntent().getExtras();
KEY_CATEGORY = bdl.getString("category");
但是现在我从片段中调用片段,使用下面的代码:
ListCategoryFragment.java :
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 :
Bundle bdl = getActivity().getIntent().getExtras();
KEY_CATEGORY = bdl.getString("category"); // Line No. - 67
日志显示:
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
发布于 2013-10-21 22:14:21
我希望您正在寻找通过包将数据从一个片段发送到另一个片段。
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()中):
Bundle bundle = this.getArguments();
int myInt = bundle.getInt(key, defaultValue);
发布于 2013-10-21 22:05:20
若要将数据发送到ListItemFragment,请执行以下操作:
String s = getArguments().getString("category");
要正确创建ListItemFragment:
getFragmentManager().beginTransaction().replace(R.id.content_frame, fragment1).commit();
应该能正常工作。我还没有专门测试过这个。您的代码没有切换片段,因为您从未调用替换()。
https://stackoverflow.com/questions/19509982
复制相似问题