Я использую 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 работает только после открытия бокового меню и проведения пролистывания, но после этого не работает прослушиватель меню.
Буду благодарен за любые советы исовет.