我正在将值从
Activity
发送到Fragment
。在接收Log cat
值时显示Null Pointer Exception
.
发送值的代码
Bundle bundle = new Bundle();
bundle.putString("address",sms.get(position).getmAddress());
bundle.putString("body",sms.get(position).getmBody());
InboxFragment inboxfragment = new InboxFragment();
inboxfragment.setArguments(bundle);
inboxfragment.setArguments(bundle);
接收值的代码
Bundle bundle= getArguments();
String address = bundle.getString("address");
String body = bundle.getString("body");
addresstv.setText(address);
msgtv.setText(body);
日志猫
02-17 12:31:23.363 19118-19118/com.smsfilter E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException
at com.smsfilter.InboxFragment.onCreateView(InboxFragment.java:53)
at android.app.Fragment.performCreateView(Fragment.java:1695)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
at android.app.BackStackRecord.run(BackStackRecord.java:682)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
OnCreateView() 方法的代码
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// return super.onCreateView(inflater, container, savedInstanceState);
view = inflater.inflate(R.layout.messagebox,container,false);
lvMsg=(ListView)view.findViewById(R.id.lvMsg);
checkBox=(CheckBox)view.findViewById(R.id.checkBox);
TextView addresstv = (TextView) view.findViewById(R.id.lblNumber);
msgtv = (TextView) view.findViewById(R.id.lblMsg);
sms= new ArrayList<Message>();
list = new ArrayList<String>();
populateMessageList();
Bundle bundle= getArguments();
//Bundle bundle= getActivity().getIntent().getExtras();
String address = bundle.getString("add");
String body = bundle.getString("body");
//addresstv.setText(address);
msgtv.setText(body);
return view;
}
试试这种方式。
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
String address = getArguments().getString("address");
String body = getArguments().getString("body");
addresstv.setText(address);
msgtv.setText(body);
}
您可以将捆绑数据从活动发送到片段,如下所示
Bundle bundle = new Bundle();
bundle.putString("address", "sms.get(position).getmAddress()");
// set Fragment Arguments
Fragment fragment = new Fragment();
fragment.setArguments(bundle);
您可以像下面这样获取它:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String address= getArguments().getString("address");
textview.setText(address);
return inflater.inflate(R.layout.fragment, container, false);
}
这应该可以正常工作。谢谢
来自你的活动
在这里你是对的。
Bundle bundle = new Bundle();
bundle.putString("address",sms.get(position).getmAddress());
bundle.putString("body",sms.get(position).getmBody());
InboxFragment inboxfragment = new InboxFragment();
inboxfragment. setArguments (bundle);
在片段中,您必须在 onCreate() 中调用 getArguments,其中您将获得 getArguments() null。
所以在片段中尝试
String address, body;
TextView msgtv;
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_filename, this, null);
msgtv = (TextView) view.findViewById(R.id.your_view_if);
Bundle bundle= getArguments();
address = bundle.getString("address");
body = bundle.getString("body");
msgtv.setText(body);
return view;
}
或者您可以在
public void onActivityCreated (Bundle savedInstanceState) {
Bundle bundle= getArguments();
address = bundle.getString("address");
body = bundle.getString("body");
msgtv.setText(body);
}
这肯定会对你有用。
无需传递捆绑包。您可以使用 getActivity().getIntent().getString()
直接检索活动意图。如果不将意向传递给活动,则可以实现一个listener
,以便在片段和活动之间进行通信。
你在onCreateView中使用不同的字符串键
改变
String address = bundle.getString("add");
为
String address = bundle.getString("address");
当您正在为捆绑包添加价值时
bundle.putString("address",sms.get(position).getmAddress());
所以你使用的密钥是 "address"
.
因此,当获取您正在使用的值时
String address = bundle.getString("add");
键不匹配。检索时将密钥"add"
更改为如下所示"address"
String address = bundle.getString("address");
或
当您在活动中赋予价值时 sms.get(position).getmAddress()
方法返回 null。所以 NullPointerException 当你将空值设置为 textview 时。