我有很多NPE,并且想知道你是如何管理这个常见任务的。
我的片段中有一个按钮,这里是WelcomeFragment。
将单击该按钮,并在MainActivity类中处理该事件。
片段是NPE,视图也是......
以下是我的MainActivity的代码片段:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
...
WelcomeFragment welcomeFragment = (WelcomeFragment) getFragmentManager().findFragmentByTag(WelcomeFragment.WELCOME_FRAGMENT_TAG);
if (welcomeFragment == null){
welcomeFragment = new WelcomeFragment();
}
View view = welcomeFragment.getView();
if (view == null){
view = new View(this);
}
TextView text1 = (TextView) view.findViewById(R.id.welcomeFragmentHeader);
text1.setText(newTextToShow + resStr);
break;
...
答案 0 :(得分:0)
我假设当没有WelcomeFragment实例时,第一次单击此按钮时,您的应用程序崩溃了NPE:
(WelcomeFragment) getFragmentManager().findFragmentByTag(WelcomeFragment.WELCOME_FRAGMENT_TAG);
返回null,因此您输入if语句并构造一个WelcomeFragment。
这不是制作片段的正确方法。它的内容不会以这种方式膨胀,因此它没有任何意见。因此,稍后对(TextView) view.findViewById(R.id.welcomeFragmentHeader);
的调用也会返回null。因此,您在下一行的空对象上调用setText()
,并获取NPE。
您需要正确地充气,将您的片段添加到here中的大纲中,或更改您的应用逻辑。