我对此主题有类似的追求:JAVA cannot make a static reference to non-static field
我理解解决问题的方法是创建一个类的实例和它的工作。 问题是,通过我正在使用的API,我不允许创建第二个实例。
是否有可能在我的MainActivity
中使用已在Fragment
中创建的对象?
我已经尝试过使用getter,但后来我得到了Cannot make a static reference to the non-static method
尝试更详细地解释问题。
在我的MainActivity
我通过object = API.createAPI_Object();
创建了一个API类的对象(我不得不这样做,因为API构造函数是私有的)
因为
public static synchronized API createAPI_Object()
{
if (numberOfObject == 0)
{
numberOfObject++;
return new API();
}
else
{
return null;
}
}
我只能创建一个对象实例。
但是现在我需要在我的Fragment.class
中使用该对象的这个实例,我不知道如何,因为我无法创建一个新的,我不能使用MainActivity
中的一个(至少我不知道怎么样)
答案 0 :(得分:1)
以下是我在片段中处理mainActivity中对象的方法:
class MainActivity extends FragmentActivity{
MyObject mObject;
onCreate(){
mObject = new MyObject();
}
public MyObject getMyObject(){
return mObject;
}
}
class MyFragment extends Fragment{
onCreateView(){
MyObject o = ((MainActivity)getActivity()).getMyObject();
}
}
答案 1 :(得分:0)
不确定你要问的是什么,但我的猜测是这样的:
当我遇到这个问题时,我设置了一个变量
private static Context mContext;
然后在我的onCreate()
方法(在我的片段中)中设置mContext = getActivity()
,然后每次都使用静态方法,而不是使用getActivity()
,我不能使用mContext。
如果您可以发布代码并进一步解释您的问题,那就太棒了。
答案 2 :(得分:0)
那就是防止使用可能没有创建的对象。如果它是在FragmentActivity中创建的,并且您不想将其引用到片段中的对象,那么如描述所示,您需要创建静态引用。您可以在MainFragment静态中设置对象,并使用类名称(如MainActivity.object)来访问它。