0

我正在尝试声明一个全局变量但没有成功。我正在关注本教程,但如果我想将变量从片段传输到 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

4

3 回答 3

2

好吧,您正在尝试将应用程序上下文转换为片段,但这是行不通的。您将不得不使用类似的东西查找正确的片段getFragmentManager().findFragmentById(R.id.my_fragment)并进行投射。

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

于 2013-10-25T11:09:54.410 回答
0

你所要做的就是:

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

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

然后在你的片段中这样做来设置状态:

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

这在活动中获得状态:

getApplicationContext().getSate();

上面的代码应该分开,以便您可以检查是否没有任何内容为空。

于 2013-10-25T11:18:35.047 回答
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 适配器中我添加了一个addTextChangedListener并将我的代码放入onTextChanged函数中。

于 2015-08-20T16:42:38.783 回答