2015-08-22 62 views
1

我想在用户点击webview(HTML)按钮时打开导航窗格。我有一个代码,当我使用Android按钮时工作正常,但当我使用HTML按钮时它不起作用。当您从左侧拖动导航抽屉时会显示导航抽屉,但在您单击HTML按钮时不会显示。无法打开webview按钮的导航抽屉点击

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" 
 
     \t android:layout_height="wrap_content" 
 
     \t android:onClick="open" 
 
      android:text="Button" /> --> 
 
      
 
      
 
      <WebView 
 
     \t android:id="@+id/webView1" 
 
     \t android:layout_width="match_parent" 
 
     \t 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 { 
 

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

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

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

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

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

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

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

 
\t DrawerListener myDrawerListener = new DrawerListener(){ 
 

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

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

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

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

 
\t \t  
 
\t \t  WebAppInterface(Context c) { 
 
\t \t   mContext = c; 
 
\t \t  } 
 

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

回答

0

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

+0

是的showDialog()方法可以很好地用于显示Toast等其他内容。 –

+0

太棒了。非常感谢。它的工作现在。 –