Как изменить пункт меню после получения флага из Webview (@JavascriptInterface)? - PullRequest
0 голосов
/ 22 октября 2019

Я использую Webwiew в своем приложении и получаю некоторое значение (флаг) через JavascriptInterface. Затем мне нужно внести изменения в NavigationView, то есть изменить некоторые элементы из меню.

Как я могу обратиться к пунктам, чтобы установить значения для полученного флага?

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this,drawer, toolbar, R.string.navigation_drawer_open , R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        WebView = (WebView) findViewById(R.id.webview);

        WebSettings webSettings = WebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
.....

        WebView.setWebViewClient(new MyWebViewClient());
        WebView.loadUrl(webview_url);
        WebView.setWebChromeClient(new MyWebChromeClient());

        // Get from WebView
        GetJavascriptInterface myJavaScriptInterface = new GetJavascriptInterface(MainActivity.this);
        WebView.addJavascriptInterface(myJavaScriptInterface, "ToAppFunction");
.....


}


@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);

        return true;
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.menu_login) {
            //inject(WebView,"javascript:SBlogin()",null);
        } else if (id == R.id.menu_bookmark) {
            inject(WebView,"javascript:SBbookmark()",null);
            //WebView.loadUrl(webview_url);
        } else if (id == R.id.menu_added) {
            inject(WebView,"javascript:SBmyplaces()",null);
        } else if (id == R.id.menu_fotomark) {
            inject(WebView,"javascript:SBmark()",null);
        } else if (id == R.id.menu_clear_point) {
            inject(WebView,"javascript:SBclear()",null);
        } else if (id == R.id.menu_tools) {
            inject(WebView,"javascript:SBclear()",null);
        } else if (id == R.id.menu_recycle) {
            inject(WebView,"javascript:SBclear()",null);
        } else if (id == R.id.menu_registration) {
            inject(WebView,"javascript:SBclear()",null);
        } else if (id == R.id.menu_viewmap) {
            inject(WebView,"javascript:SBsetmap()",null);
        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    public class WebAppInterface {
        Context mContext;
        WebAppInterface(Context c) {
            mContext = c;
        }

        @JavascriptInterface
        public void isLogin(String logins) {

           // Toast.makeText(mContext, logins, Toast.LENGTH_LONG).show();
            onResume(logins);
        }



    }

     public void onResume(String logins) {
            String loginflag = "true";
                if (logins.equals(loginflag)) {
                NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
            navigationView.getMenu().findItem(R.id.menu_login).setTitle(R.string.menu_logout);

            } else {

            .....

            } 
    }  

onResume работает только после открытия бокового меню и проведения пролистывания, но после этого не работает прослушиватель меню.

Буду благодарен за любые советы исовет.

...