如何从JavaScriptInterface启动Navigation Drawer

How to start Navigation Drawer from JavaScriptInterface

本文关键字:Navigation Drawer 启动 JavaScriptInterface      更新时间:2023-09-26

我有WebView来显示我的网页,我想用Javascript运行Navigation Drawer

我的logcat没有显示任何错误消息,但它没有运行/

我的JavaScript:

$('body').on("taphold", function ()
{
    var checkboxes = document.getElementsByTagName('input');
    for (var i = 0; i < checkboxes.length; i++)
    {
        if (checkboxes[i].type == 'checkbox')
        {
            checkboxes[i].checked = true;
        }
    }
    AndroidFunction.DeleteAll();
}

Java:

public class MyJavaScriptInterface {
    Context mContext;
    MyJavaScriptInterface(Context c) {
        mContext = c;
    }
    @JavascriptInterface
    public void DeleteAll()
    {
        //========== Array ================
        final String[] fragments ={"Delete All"};
        //=================================
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActionBar().getThemedContext(), android.R.layout.simple_list_item_1,fragments);
        final DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);
        final ListView navList = (ListView) findViewById(R.id.drawer);
        navList.setAdapter(adapter);
        navList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            @JavascriptInterface
            public void onItemClick(AdapterView<?> parent, View view, final int pos,long id){
                drawer.setDrawerListener( new DrawerLayout.SimpleDrawerListener(){
                    @Override
                    @JavascriptInterface
                    public void onDrawerClosed(View drawerView){
                        super.onDrawerClosed(drawerView);
                        switch (pos) {
                            case 0:
                                final SQLiteDatabase mydatabase = openOrCreateDatabase("CopyCollection", MODE_PRIVATE, null);
                                mydatabase.execSQL("DELETE * FROM Details;");
                                mydatabase.close();
                                myBrowser.loadUrl("javascript:fill_comment()");
                                break;
                        }
                    }
                });
                drawer.closeDrawer(navList);
            }
        });
    }
}

据我所知,当调用DeleteAll方法时,你想关闭抽屉,对吗?如果是这样,问题是您正在将drawer.closeDrawer(navList)调用到匿名OnItemClickListener中。您必须将closeDrawer调用移出侦听器对象,并将其放入DeleteAll方法范围。