当Menu对象作为回调函数被调用时,它将变为null



我需要在actionbar/toolbar中放置一个进度条。我可以通过以下链接来完成(http://www.michenux.net/android-refresh-item-action-bar-circular-progressbar-578.html)。然而,为了显示和隐藏进度条,我面临着一个问题,遵循我在这里使用的回调设计模式。以下是代码片段-

    public interface ICallBack {
        void setRefreshActionButtonState(boolean b);
    }
    public class MyFragment extends Fragment implements View.OnClickListener, ICallBack {
        private Menu optionsMenu;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setHasOptionsMenu(true);
        }
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            webView = (WebView) findViewById(R.id.main_web);
            webView.setWebViewClient(new MyWebViewClient());    
            webView.loadUrl("http://stackoverflow.com/");
        }
        @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
            this.optionsMenu = menu;
            getActivity().getMenuInflater().inflate(R.menu.menu_home_base, menu);
        }
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            if (id == R.id.action_refresh) {
                // Logic to load the webview again 
            }
            return super.onOptionsItemSelected(item);
        }
        @Override
        public void setRefreshActionButtonState(boolean refreshing) {
            if (optionsMenu != null) {
                final MenuItem refreshItem = optionsMenu.findItem(R.id.action_refresh);
                if (refreshItem != null) {
                    if (refreshing) {
                        refreshItem.setActionView(R.layout.toolbar_indeterminate_progress);
                    } else {
                        refreshItem.setActionView(null);
                    }
                }
            }
        }
    }

public class MyWebViewClient extends WebViewClient {
        ICallBack callBack;
        public MyWebViewClient(Activity context) {
            callBack = new MyFragment();
        }
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            callBack.setRefreshActionButtonState(true);//Showing the progressbar
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            callBack.setRefreshActionButtonState(false);//Hiding the progressbar
        }
    }

setRefreshActionButtonState()被调用时,我得到optionsMenu值为null,导致无法显示和隐藏进度条。

有人能帮我弄清楚我哪里做错了吗。

谢谢,

你能上传项目action_refresh所在的xml吗?问题可能在findItem(R.id.action_refresh);

最新更新