Android声明全局变量片段

时间:2013-10-25 10:33:54

标签: android android-fragments global-variables

我正在尝试声明一个全局变量,但没有成功。我正在关注this tutorial,但如果我想将一个变量从fragment转移到MainActivity,那么这不起作用。

首先,我将此代码添加到我的片段类中:

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

3 个答案:

答案 0 :(得分:2)

好吧,您正在尝试将应用程序上下文强制转换为无法正常工作的片段。 您必须使用类似getFragmentManager().findFragmentById(R.id.my_fragment)的内容查找正确的片段并进行投射。

在教程中,他使用的是app对象,而不是片段。这是一个坏主意,如果可能应该避免,因为app对象内的所有变量都不会被垃圾收集,填满RAM。

答案 1 :(得分:0)

您所要做的就是:

把它放在你的应用程序类中:

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

然后在你的片段中,只需这样设置状态:

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

这是在获得状态的活动中:

getApplicationContext().getSate();

上面的代码应该分开,这样你就可以检查是否有空。

答案 2 :(得分:0)

我遇到了类似的问题,通过阅读一些评论,我能够为一个案例提供解决方案。我有一个我正在构建的自定义适配器类,我需要从该适配器类修改一个全局变量。我的全局变量是附加到Activity的Fragment的一部分。这就是我的所作所为:

在Fragment中我设置了全局变量:

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适配器中添加了addTextChangedListener并将我的代码放在onTextChanged函数中。