导航抽屉不打开 webview 按钮单击

navigation drawer not opening for webview button click

我正在尝试在用户单击网络视图 (HTML) 按钮时打开导航抽屉。我有一个代码,当我使用 Android 按钮时可以正常工作,但当我使用 HTML 按钮时它不起作用。导航抽屉在您从左侧拖动时显示,但在您单击 HTML 按钮时不显示。

activity_main

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/background_light"
        android:orientation="vertical" >

       <!-- <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:onClick="open"
            android:text="Button" />  -->
            
            
            <WebView
         android:id="@+id/webView1"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
      
    </LinearLayout>

    <LinearLayout
        android:id="@+id/drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@android:color/background_light"
        android:orientation="vertical"
        android:padding="5dp" >

        <fragment
            android:id="@+id/fragment1"
            android:name="com.example.webviewnav.MyListFragment1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

</android.support.v4.widget.DrawerLayout>
MyListFragment1

public class MyListFragment1 extends ListFragment {

 String[] month = { "January", "February", "March", "April", "May", "June",
   "July", "August", "September", "October", "November", "December" };

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ListAdapter myListAdapter = new ArrayAdapter<String>(getActivity(),
    android.R.layout.simple_list_item_1, month);
  setListAdapter(myListAdapter);
 }

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
   Bundle savedInstanceState) {
  return inflater.inflate(R.layout.listfragment1, container, false);
 }

 @Override
 public void onListItemClick(ListView l, View v, int position, long id) {
  // TODO Auto-generated method stub
  Toast.makeText(getActivity(),
    getListView().getItemAtPosition(position).toString(),
    Toast.LENGTH_LONG).show();
 }
}
MainActivity

public class MainActivity extends Activity {
 
 private DrawerLayout drawerLayout;
 private View drawerView;
 WebView wv;

 @SuppressLint("SetJavaScriptEnabled")
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
  drawerView = (View)findViewById(R.id.drawer);
  
  /*Button buttonOpenDrawer = (Button)findViewById(R.id.opendrawer);
  buttonOpenDrawer.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View arg0) {
    drawerLayout.openDrawer(drawerView);
   }
  }); */
  
   wv = (WebView)findViewById(R.id.webView1);
    wv.getSettings().setJavaScriptEnabled(true);
    wv.addJavascriptInterface(new WebAppInterface(this), "Luke");
    wv.loadUrl("file:///android_asset/www/mind.html"); 
  
  drawerLayout.setDrawerListener(myDrawerListener);
 } //onCreate ends

 DrawerListener myDrawerListener = new DrawerListener(){

  @Override
  public void onDrawerClosed(View drawerView) {
   //textPrompt.setText("onDrawerClosed");
  }

  @Override
  public void onDrawerOpened(View drawerView) {
   //textPrompt.setText("onDrawerOpened");
  }

  @Override
  public void onDrawerSlide(View drawerView, float slideOffset) {
   //textPrompt.setText("onDrawerSlide: " + String.format("%.2f", slideOffset));
  }

  @Override
  public void onDrawerStateChanged(int newState) {
   String state;
   switch(newState){
   case DrawerLayout.STATE_IDLE:
    state = "STATE_IDLE";
    break;
   case DrawerLayout.STATE_DRAGGING:
    state = "STATE_DRAGGING";
    break;
   case DrawerLayout.STATE_SETTLING:
    state = "STATE_SETTLING";
    break;
   default:
    state = "unknown!";
   }
    
   //textPrompt2.setText(state);
  }};  
 
  
  public class WebAppInterface {
      Context mContext;

      
      WebAppInterface(Context c) {
          mContext = c;
      }

      
      @JavascriptInterface
      public void showDialog() {
          
       
       drawerLayout.openDrawer(drawerView);
       
       //Toast.makeText(getApplicationContext(), "Good", Toast.LENGTH_SHORT).show();
      }
  } 
  
  /*public void open(View v){
   drawerLayout.openDrawer(drawerView);
  } */
 
 
 
 
 
 
} //Activity ends

是否调用了 showDialog 方法?如果是这样,请尝试从 UI 线程调用 drawerLayout.openDrawer:MainActivity.this.runOnUiThread(...)