未调用Android onCreateView
在我的开发者控制台上,我遇到了一些错误。关于这个错误的一点是,它们都来自安卓未调用Android onCreateView,android,Android,在我的开发者控制台上,我遇到了一些错误。关于这个错误的一点是,它们都来自安卓4.1版本的设备 编辑:4.2设备上出现一些错误,但仍无法再现确切的行为 我已经用安卓版本4.1设置了一个模拟器设备,使用debbuging,我发现onCreateView没有调用它 我用的是碎片。我有一个类来处理片段(公共类片段扩展ActionBarActivity实现QueryFragment.OnQuerySelectedListener),在它检查我们是否在双窗格或单窗格布局后,该类执行以下操作: @Overri
4.1
版本的设备
编辑:4.2设备上出现一些错误,但仍无法再现确切的行为
我已经用安卓版本4.1
设置了一个模拟器设备,使用debbuging,我发现onCreateView
没有调用它
我用的是碎片。我有一个类来处理片段(公共类片段扩展ActionBarActivity实现QueryFragment.OnQuerySelectedListener
),在它检查我们是否在双窗格或单窗格布局后,该类执行以下操作:
@Override
public void onItemSelected(Bundle itemSelectedData) {
View rightLayout = findViewById(R.id.fragment_two);
if (rightLayout != null) {
// do something if we are in "tablet" mode
} else {
Infodata newFragment = new Infodata();
newFragment.setArguments(itemSelectedData);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentsboth, newFragment);
// Commit the transaction
transaction.commit();
}
}
我的班级Infodata
public class Infodata extends Fragment implements OnSeekBarChangeListener, OnItemSelectedListener
此类与此方法相同:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
//... more stuff
activityContext = getActivity().getApplicationContext();
bDFav = new Database(activityContext, true);
//... more stuff
}
及
最后:
boolean isItemFavorite() {
bDFav.open();
// do stuff
bDFav.close();
return isFavorite;
}
使用我的手机(android版本4.2.1),我的Fragments
类不执行Infodata newFragment=newinfodata()代码>和在事务.commit()之后调用code>myonCreateView
实例化isItemFavorite()
调用oncreateoptions菜单所需的所有内容。这使得bDFav.open()代码>位于isItemFavorite()
处,它按预期工作,也就是说,它不会产生nullpointerexception
另一方面,由于仿真器设备运行android 4.1.1,它在transaction.commit()上运行相同的操作但是在那之后,我的方法onCreateView
不会被调用,因此不会实例化任何东西OnCreateOptions菜单
在那里被调用,当调用isItemFavorite()
时,它在bDFav.open()处生成nullpointerexception
代码>
为什么在android版本中没有调用onCreateView
,我如何绕过它?很好
我相信我已经找到了答案
在方法中:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
//... more stuff
activityContext = getActivity().getApplicationContext();
bDFav = new Database(activityContext, true);
//... more stuff
}
就在创建视图的onCreateView
之后,我有了sethaspoptionmenu(true)
,所以方法是
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
setHasOptionsMenu(true);
//... more stuff
activityContext = getActivity().getApplicationContext();
bDFav = new Database(activityContext, true);
//... more stuff
}
因此,当设置选项菜单(true)时代码>被调用,程序的控制传递到onCreateOptions菜单
,由于在该方法中我调用了另一个方法,该方法应使用本应在onCreateView
中实例化的内容,因此应用程序崩溃
我的解决方案是将设置为选项菜单(true)代码>在onCreateView的末尾,从而使所有实例化都能正确完成
有一件事很有趣。为什么它在某些设备上有效而在其他设备上无效。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
setHasOptionsMenu(true);
//... more stuff
activityContext = getActivity().getApplicationContext();
bDFav = new Database(activityContext, true);
//... more stuff
}