Android 打开片段时使用onItemClick的NullPointerException

Android 打开片段时使用onItemClick的NullPointerException,android,android-layout,android-fragments,android-appcompat,drawerlayout,Android,Android Layout,Android Fragments,Android Appcompat,Drawerlayout,我正在尝试实现一个导航抽屉() 单击抽屉中的项目时,我想打开一个片段。下面是我的MainActivity.java中的一些代码 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int editedPosition = position + 1; Toast.makeText(MainActivity.th

我正在尝试实现一个导航抽屉()

单击抽屉中的项目时,我想打开一个片段。下面是我的MainActivity.java中的一些代码

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                int editedPosition = position + 1;
                Toast.makeText(MainActivity.this, "You selected item " + editedPosition, Toast.LENGTH_SHORT).show();


                switch(position){
                    case 0:
                        Log.d("SWITCH", "Case 0");
                        if (!(getSupportFragmentManager().getFragments().get(0) instanceof NewLogFragment)) {
                            getSupportFragmentManager().beginTransaction()
                                    .replace(R.id.contentFrame, Fragment
                                            .instantiate(MainActivity.this, Fragments.ONE.getFragment()))
                                    .commit();
                        }
                        break;
                    case 1:
                       if (!(getSupportFragmentManager().getFragments().get(0) instanceof LogFragment)) {
                            getSupportFragmentManager().beginTransaction()
                                    .replace(R.id.contentFrame, Fragment
                                            .instantiate(MainActivity.this, Fragments.ONE.getFragment()))
                                    .commit();
                        }
                        break;
                }
                mDrawerLayout.closeDrawer(mDrawerList);
            }
        });
111行是这一行吗

`if (!(getSupportFragmentManager().getFragments().get(0) instanceof LogFragment)) {`
更多详情:

  • MainActivity扩展了ActionBarActivity
  • 我的片段在任何地方扩展
    Fragment
    (android.support.v4.app.Fragment)
那么为什么我会得到这个空指针异常呢

编辑我已应用Rohit的建议,不再出现任何错误。但是布局没有改变。有什么不对劲吗

编辑@我想出来了。。。一开始没有将片段添加到活动中。。。所以没有什么可以取代杜:) 谢谢大家

更换

if (!(getSupportFragmentManager().getFragments().get(0) instanceof NewLogFragment))
Fragments.ONE.getFragment()

同样地,也更改案例1

编辑

替换

if (!(getSupportFragmentManager().getFragments().get(0) instanceof NewLogFragment))
Fragments.ONE.getFragment()


在案例0中,您的问题是返回空指针的
getFragments()
方法。如果你查阅安卓API文档,你会发现关于这个方法没有一个词。若官方API中并没有提到某些东西,不要期望它能在xD中工作

编辑: 在第二种情况下,您希望:

instantiate(MainActivity.this, Fragments.TWO.getFragment()))
而不是

instantiate(MainActivity.this, Fragments.ONE.getFragment()))
编辑2 好吧,让我们试试这样的开关:

 switch(position){
                        case 0:
                            Log.d("SWITCH", "Case 0");  
                                getSupportFragmentManager().beginTransaction()
                                        .replace(R.id.contentFrame, Fragment
                                                .instantiate(MainActivity.this, Fragments.ONE.getFragment()))
                                        .commit();
                            break;
                        case 1:
                                getSupportFragmentManager().beginTransaction()
                                        .replace(R.id.contentFrame, Fragment
                                                .instantiate(MainActivity.this, Fragments.TWO.getFragment()))
                                        .commit();
                            break;
                    }

这是可行的,但布局根本没有改变。也没有错误。知道怎么回事吗?我不知道。你的建议有助于消除错误。这是最好的部分。解决方案有助于OP,但仍有人对其投了否决票,而且没有任何评论。伟大的请参阅我编辑的答案。这应该有助于解决您面临的其他问题。这不是导致错误的原因。我只是得到一个空白屏幕。可能是重复的谢谢。Rohit的建议消除了空指针异常,但现在我的布局没有改变。有什么想法吗?:(删除if语句也没有帮助
instantiate(MainActivity.this, Fragments.TWO.getFragment()))
instantiate(MainActivity.this, Fragments.ONE.getFragment()))
 switch(position){
                        case 0:
                            Log.d("SWITCH", "Case 0");  
                                getSupportFragmentManager().beginTransaction()
                                        .replace(R.id.contentFrame, Fragment
                                                .instantiate(MainActivity.this, Fragments.ONE.getFragment()))
                                        .commit();
                            break;
                        case 1:
                                getSupportFragmentManager().beginTransaction()
                                        .replace(R.id.contentFrame, Fragment
                                                .instantiate(MainActivity.this, Fragments.TWO.getFragment()))
                                        .commit();
                            break;
                    }