2013-10-25 95 views
0

我試圖聲明一個全局變量但沒有成功。我正在關注this tutorial,但如果我想將片段中的變量傳遞給MainActivity,這不起作用。Android聲明全局變量片段

首先,我將此代碼添加到我的片段類:

public class WebViewFragment extends Fragment{ 
private WebView myState; 

public WebView getState(){ 
    return myState; 
    } 
    public void setState(){ 
    myState = webView; 
    } 

} 

然後我說這個我MainActivity但它不工作:

WebViewFragment appState = ((WebViewFragment)getApplicationContext()); 
WebView state = appState.getState(); 

我得到這個error: Cannot cast from Context to WebViewFragment

回答

2

好吧,你正試圖將應用上下文轉換爲片段,這是行不通的。 你將不得不用getFragmentManager().findFragmentById(R.id.my_fragment)之類的東西來查找正確的片段並進行轉換。

在教程中,他使用的是應用程序對象,而不是片段。這是一個壞主意,應儘可能避免,因爲應用程序對象內的所有變量都不會被垃圾收集,從而填滿RAM。

0

所有你需要做的是:

將這個在你的應用類:

WebView state; 
public WebView getState(){ 
    return myState; 
} 
public void setState(WebView webViewState){ 
    myState = webViewState; 
} 
在片段

然後就做這個設置狀態:

getActivity().getApplicationContext().setSate(state); 

這在活動中獲得狀態:

getApplicationContext().getSate(); 

上面的代碼應該分開,以便檢查是否沒有空。

+0

我不完全理解在哪裏放置代碼。你說我必須把它放到Application類中的代碼的第一部分,你是指哪一個?我的MainActivity類或我的片段類? – Izak

+0

沒有一個,就像在你發佈的教程中,你應該使用一個Application類的子類,並把它放在那裏。 – Mikel

+0

你應該閱讀這個答案http://stackoverflow.com/a/708317/562840 – Mikel

0

我有類似的問題,通過閱讀一些評論,我能夠提供一個案例的解決方案。我有一個自定義的適配器類,我正在構建,我需要修改該適配器類中的全局變量。我的全局變量是連接到活動的片段的一部分。下面是我所做的:

在我設置的全局變量的片段:

public String myGlobalString = "initial_value";

在我正在建的適配器類的getView(...)函數我有內:

MyFragment myFragment = (MyFragment) ((MyActivity) context).getFragmentManager().findFragmentById(R.id.fragment_my_fragment); 
myFragment.myGlobalString = "new_value"; 

這對我有用。我試圖修改ListView中EditText的值,所以在我的ListView adapater中,我添加了一個addTextChangedListener,並將我的代碼放在onTextChanged函數中。