2014-12-22 80 views
2

为什么我不能访问静态复选框对象?MainActivity中的片段静态复选框NullPointer异常

MainActivity(这里我想叫它)

if (color == 0) { 
    ColorFragment.yellow.setChecked(true); 
} 
... 

ColorFragment(如果它被初始化)

static RadioButton yellow; 

yellow = (RadioButton) getView().findViewById(R.id.yellow_button); 

我已经尝试添加getApplicationContext(), getActivity()和他人getView()没有运气。

这是为什么造成这个NullPointerException

+0

确保在将ColorFragment附加到主活动后执行“ColorFragment”? –

+0

好主意,但即使在viewpager设置后显然会设置它,它仍然会给出一个NullPointer。 – Michael

+0

“ColorFragment”在ViewPager中的位置是什么? –

回答

0

的问题

变量yellow将返回null,因为它是我想称它为后实例化。


我寻找的static可变MainActivity.color的在ColorFragmentonActivityCreated方法的值。

我同样使用了switchcasesetChecked()

switch (MainActivity.color) { 
    case 0: 
     yellow.setChecked(true); 
     break; 
    case 1: 
... 
1

您绝对可以从ColorFragment类的外部访问静态RadioButton黄色成员变量。

问题出在这个成员变量被初始化为非null的时候。由于您懒惰初始化此成员变量,有几件事要注意:

1)在调用ColorFragment的onCreateView方法后,您必须确保只访问ColorFragment.yellow,或者确保检查为null如果ColorFragment尚未调用onCreateView方法,则不会因NullPointerException而崩溃。

2)确保你真的有一个单选按钮与您ColorFragment膨胀其内容视图布局内声明的ID yellow_button。如果你不这样做,findViewById(R.id.yellow_button)返回null,然后将yellow设置为null,并且你将冒着NullPointerException的风险。

+0

你说得很对。它返回null。 我改变了我用if语句查找对象的方式并修复了它。 – Michael