我正在尝试声明一个全局变量,但没有成功。我正在关注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
答案 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
函数中。