我一直在尝试使用bundle将我的活动中的一串数据发送到一个片段,但是当我尝试访问它时,它会产生一个nullpointerexception。
活动中的oncreate方法如下所示
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chart);
// Setup toolbar and title
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
readDb();
printChart();
printTop10();
Bundle bundle = new Bundle();
bundle.putString("edttext", myString);
// set Fragmentclass Arguments
ToolbarFragment fragobj = new ToolbarFragment();
fragobj.setArguments(bundle);
}
并且onCreateView上的片段看起来像这样
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String strtext = getArguments().getString("edttext");
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_toolbar, container, false);
}
任何帮助摆脱nullpointer将不胜感激,我试图将数据发送到片段,以便它可以使用共享按钮并共享数据
答案 0 :(得分:0)
似乎“edttext”键的获取部分导致null,因为它在没有实际分配给它时被触发,所以我想使用默认值获取“edttext”键可以避免null。
在片段的oncreateview中这样做
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//in this line add these "" as a default value to avoid null.
String strtext = getArguments().getString("edttext","");
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_toolbar, container, false);
}
修改强>
忘记上一个答案并执行此操作:
删除此:
Bundle bundle = new Bundle();
bundle.putString("edttext", myString);
// set Fragmentclass Arguments
ToolbarFragment fragobj = new ToolbarFragment();
fragobj.setArguments(bundle);
并假设您的活动名称是(MyActivity),然后在oncreate
下执行此操作 private String myString="whatever";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chart);
// Setup toolbar and title
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
readDb();
printChart();
printTop10();
}
//add this method (this method will send the myString to fragment)
public String getmyString(){
return myString;
}
现在转到你的片段并从oncreateview
中删除它 String strtext = getArguments().getString("edttext");
并在片段
中这样做 private String strtext="";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//now get the string like that
strtext=((MyActivity)getActivity).getmyString();
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_toolbar, container, false);
}
<强>更新强>
1)确保(items)列表不为null。你应该在填充它之前初始化它(为了检测问题,最好显示如何填充你的项目列表)。
2)在getmystring()方法中尝试这个:
public String getmyString(){
for(int i=0 ; i<items ; i++){
myString=items.get(i);
}
return myString;
}
在填充任何内容之前,不要忘记在onCreate中初始化项目列表。