未调用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()之后my
onCreateView
实例化
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
}