Artur Couto
Artur Couto

Reputation: 498

Update Action Bar Menu

I'm turning invisible my refresh button in the action bar (sherlock action bar). But, I don't know how to call the actionbar update (onPrepareOptionsMenu() or InvalidateOptionsMenu()) inside my makeupdate() function (I need this call inside the function). I've been search in stackoverflow and google for hours... tested all and get nothing...

My makeupdate() function:

public void makeupdate(String toast) {
    Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    MenuItem item = menu.findItem(R.id.refresh);
    item.setVisible(false);
}

EDIT - My Code

public class SiteActivity extends SherlockActivity {

    private WebView myWebView;
    final Activity MyActivity = this;
    com.actionbarsherlock.app.ActionBar actionbar;
    private Menu mainMenu;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 


        actionbar = getSupportActionBar();
        actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        actionbar.setTitle("APP");
        actionbar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);

        setContentView(R.layout.site);

        myWebView = (WebView) findViewById(R.id.webview);
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.getSettings().setBuiltInZoomControls(true);
        myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");  
            myWebView.loadUrl("file:///android_asset/noconnection.html");

        myWebView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress)
            {
                MyActivity.setProgress(progress * 100);
            }
        });

        myWebView.setWebViewClient(new SiteActivityClient() {
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                myWebView.loadUrl("file:///android_asset/noconnection.html");
            }   
        });                 
    }

    public class WebAppInterface {
        Context mContext;

        WebAppInterface(Context c) {
            mContext = c;
        }
        @JavascriptInterface
        public void makeupdateshowToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
            mainMenu.findItem(R.id.refresh).setVisible(false);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getSupportMenuInflater().inflate(R.layout.actionbar, menu);
        mainMenu = menu;
        return true;
    }       
}

Upvotes: 0

Views: 1965

Answers (1)

fedepaol
fedepaol

Reputation: 6862

Your _ WebAppInterface_ class already has a Context member. Make it a SherlockActivity (better if you change the name)

public class WebAppInterface {
     SherlockActivity mActivity;

WebAppInterface(SherlockActivity c) {
    mActivity = c;
}
@JavascriptInterface
public void makeupdateshowToast(String toast) {
    Toast.makeText(mActivity, toast, Toast.LENGTH_SHORT).show();
    mainMenu.findItem(R.id.refresh).setVisible(false);
    mActivity.invalidateOptionsMenu();
}

}

and call

mActivity.invalidateOptionsMenu()

Upvotes: 2

Related Questions