Android 打开片段时使用onItemClick的NullPointerException
我正在尝试实现一个导航抽屉() 单击抽屉中的项目时,我想打开一个片段。下面是我的MainActivity.java中的一些代码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
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
- 我的片段在任何地方扩展
(android.support.v4.app.Fragment)Fragment
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;
}