Java 从扩展片段的类中获取参数()时的NPE
在下面的代码中,我试图将布局具有Java 从扩展片段的类中获取参数()时的NPE,java,android,android-fragments,fragment,Java,Android,Android Fragments,Fragment,在下面的代码中,我试图将布局具有选项卡的mainactivity的值传递给另一个类,该类使用setArgument()和getArgument()扩展fragment。当运行应用程序时。logcate抛出NPE。代码中缺少了什么 主要活动: public void onClick(View v) { // TODO Auto-generated method stub Fragment mSelectedFragment = null; switch (v.getId(
选项卡的mainactivity
的值传递给另一个类,该类使用setArgument()
和getArgument()
扩展fragment
。当运行应用程序时。logcate抛出NPE
。代码中缺少了什么
主要活动:
public void onClick(View v) {
// TODO Auto-generated method stub
Fragment mSelectedFragment = null;
switch (v.getId()) {
case R.id.btn00:
Bundle mBundle = new Bundle();
String clicks = Integer.toString(i);
mBundle.putString("btn1_clicks", clicks);
mSelectedFragment = new Fragment00();
mSelectedFragment.setArguments(mBundle);
if (mSelectedFragment != null) {
FragmentManager mFragmentManager = getFragmentManager();
mFragmentManager.beginTransaction()
.replace(R.id.fragment00ID, mSelectedFragment).commit();
}
i ++;
break;
}
类\u扩展\u片段:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment00, null);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
mTv = (TextView) getView().findViewById(R.id.fragment00Tv00);
/*line 32->*/String str = getArguments().getString("btn1_clicks").toString();
mTv.setText("the Button was clicked "+str+ " time(s)");
Log.i(TAG, "onActivityCreated(): "+getArguments().getString("btn1_clicks").toString());
}
日志:
05-27 13:36:14.380: E/AndroidRuntime(11609): java.lang.RuntimeException: Unable to
start activity
ComponentInfo{com.example.fragments01/com.example.fragments01.MainActivity}:
java.lang.NullPointerException
05-27 13:36:14.380: E/AndroidRuntime(11609): at
com.example.fragments01.Fragment00.onActivityCreated(Fragment00.java:32)
05-27 13:36:14.380: E/AndroidRuntime(11609): at
android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1860)
我认为问题在于,您正在
onActivityCreated
上检索getArguments()
,但您还没有创建捆绑包(您正在onClick
中创建它)。您应该检查getArguments()
是否返回null,或者使用onClick
创建包
以前的版本将是:
if (getArguments() != null){
String str = getArguments().getString("btn1_clicks").toString();
}
第几行是什么(Fragment00.java:32)?@algui91 Fragment00是扩展fragmentNo的类的名称,我想知道异常发生的原因,日志显示是Fragment00.java文件的第32行。而且在
i++
中有一个空格,它应该是i++
您是否在Fragment00
中覆盖onCreateView()
?如果您不这样做,getView
将返回null
@algui91请将更新后的代码显示在第32行的位置,但我正在调用getargument
内部onActivityCreated()
,我应该从哪里调用它?还有什么会导致捆绑包无法创建?除非您至少单击一次片段,否则捆绑包不会被创建,并且在您可以在视图中单击之前,onActivityCreated
将被执行。是的,我知道。非常感谢。你能把我的问题投赞成票吗?因为昨天我试着理解这个片段,而你最后的评论对我很有帮助,现在我能够更清楚地了解片段是如何工作的