2012-10-25 25 views
31

訪問活動變量在活動,我有:如何從一個片段的Android

public class tabsmain extends Activity{ 
    public static Context appContext; 

    public boolean lf_ch=false; 

    public void onCreate(Bundle savedInstanceState){ 

我想訪問,並可能從內部tabsmain片段lf_ch變化;

public class tabquests extends Fragment{ 
    public CheckBox lc; 
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)//onCreateView 
    { 
lc.setChecked(//set it to lf_ch); 

但是,我似乎無法訪問lf_ch的值。

+2

我的2美分:靜態上下文場是壞的,mkay ...和名稱convetion ...儘量不要只使用小寫字母在類名「tabsmain '=>'TabsMain'...它可以給var命名(例如:'TabsMain tabsmain = null;'),但是當你使用這個類時,就像在David M中那樣回答,很難知道tabsmain是類名還是var。 。看看Android SDK類,他們總是首先使用的java類上面 – Selvin

+0

我希望你已經去過一個或兩個變量命名約定,因爲你發佈了這個:) –

回答

48

試試這個:

public View onCreateView(...){ 
    tabsmain xxx = (tabsmain)getActivity(); 
    lc.setChecked(xxx.lf_ch); 
} 
+0

這隻會幫助讀取變量es爲對象xxx。但是,如果我想讀取其他片段中的相同變量,它將無法工作。 –

+0

我可以改變它。 改進:你可以直接作爲tabsmain。lf_ch 您可以更改爲tabsmain.lf_ch = new_value –

0

嘗試tabsmain.appContext.lf_ch會給該變量的U值。

此外,在該活動設置appContext = this

0

試試這個

public boolean lf_ch=false; 
public class tabsmain extends Activity{ 

    public static Context appContext; 
    public void onCreate(Bundle savedInstanceState){ 
+3

請您解釋一下嗎? – Fabio

+0

我不確定我關注。如果lf_ch不在tabsmain類中,它在哪裏? –

-1

變化: public boolean lf_ch=false;到:public static boolean lf_ch=false; 您可以訪問/與更改值:tabsmain.lf_ch

+3

不要只是將變量從非靜態切換到靜態,只能用正當的理由。 – Hidde

0

你可以嘗試以下方法:

lc.setChecked(((yourpackagename)getActivity()).lf_ch); 
1

另一種方法是從活動獲得的數據是通過訪問活動的意圖:

getActivity.getIntent().getExtras(); 

,如果你在XML片段開始活動,並想控制它可能是有用的以某種方式片段的onCreate()行爲。

PS:原因,你應該首先把東西意圖

13

我知道這是一個老問題,但在這裏是沒有經過任何跳火圈工作一個簡單的答案。在你的片段中,定義一個變量,該變量是片段在onCreateView中的活動,然後將該變量連接到該活動,然後獲取可以獲取主活動中任何公共變量的引用。當我在這裏結束時,我已經忘記了它。做另一種方式有點難,因爲你需要找到顯示的確切片段。然而,對此,您不需要以其他方式來做,因爲您可以輕鬆地來回傳遞內容。我希望這可以幫助任何碰到它的人。

public Quiz_Avtivity mainQuiz; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_quiz, container, false); 

mainQuiz = (Quiz_Avtivity) getActivity(); 
//Below is where you get a variable from the main activity 
mainQuiz.AnyPublicVariable = whatEver; 
//also 
whatEver = mainQuiz.AnyPublicVariable 
+0

非常感謝:D –

+0

沒問題。樂意效勞。如果不是我在這裏得到的幫助,我永遠不會完成任何項目。只是想我會盡可能地放棄。 –

+2

......太真實了! :D ...豎起大拇指到stackoverflow團隊和每一個花時間回饋社區的人! :D –

0

嘗試這樣:

ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager); 
+0

如果您希望從活動的佈局中獲取視圖,那麼這將起作用。 – Aba

相關問題