2014-01-14 23 views
0

使用我有一個類似的追求就像這個話題:JAVA cannot make a static reference to non-static field解決方法用於創建對象的片段

我理解這個問題解決創建類的實例的與它的工作。 問題是,通過我使用的API,我不允許創建第二個實例。

是否有可能在我的Fragment中使用已在MainActivity中創建的對象?

我想已經有一個getter,但後來我得到Cannot make a static reference to the non-static method

試圖解釋問題的更詳細。

在我MainActivity我通過object = API.createAPI_Object();創建APIclass的對象(我被迫做這種方式會導致API構造函數是私有)

由於

public static synchronized API createAPI_Object() 
    { 
    if (numberOfObject == 0) 
    { 
     numberOfObject++; 
    return new API(); 
    } 
    else 
    { 
    return null; 
    } 
} 

我可以只創建對象的一個​​實例。

但現在我需要在我的Fragment.class中使用這個對象的實例,我不知道如何,因爲我不能創建一個新的,我不能使用MainActivity之一(至少我不知道如何)

+0

粘貼代碼的兄弟??? –

+0

你好,你用newInstance命令創建你的類嗎?如果是這樣,你應該把這個類放入一個列表中。獲得現有課程後,您可以按照自己的想法進行操作。 – alicanbatur

+0

((MainActivity)getActivity())。getInstanceYouWant()並在你的片段中使用它 –

回答

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(); 
    } 
} 
+0

非常好:) thx – Fraggles

+0

@Fraggles另一種方式是爲這些對象創建一個Manager作爲Singleton,只是爲了給你多一點輸入 –

+0

也許另一種選擇,但目前你的方法來處理它:) – Fraggles

0

不知道你問清楚了,但我的猜測是這樣的:

當我通常會遇到的問題,我設置一個變量

private static Context mContext; 

,然後在我的onCreate()方法(在我的片段)我設置了mContext = getActivity(),然後每次都使用靜態方法,而不是使用getActivity(),而我不能使用mContext。

如果您可以發佈您的代碼並進一步解釋您的問題,那將非常棒。

+0

我會嘗試在我的主題上面解釋它。由於我的公司規則,我不允許發佈所有代碼:( – Fraggles

0

那麼這是爲了防止使用可能沒有創建的對象。如果它是在您的FragmentActivity中創建的,並且您不想將其引用到片段中的某個對象,則如描述所述,您需要創建一個靜態引用。你可以在你的MainFragment靜態中設置你的對象,並用MainActivity.object這樣的類名達到它。

相關問題