【问题标题】:navigation drawer not opening for webview button click导航抽屉未打开 webview 按钮单击
【发布时间】:2015-08-22 08:19:48
【问题描述】:

当用户单击 webview (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

【问题讨论】:

    标签: android android-webview navigation-drawer


    【解决方案1】:

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

    【讨论】:

    • Yes showDialog() 方法适用于显示 Toast 等其他内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    相关资源
    最近更新 更多