Android 在webview中单击链接时如何启动活动?

Android 在webview中单击链接时如何启动活动?,android,android-activity,webview,Android,Android Activity,Webview,我正在开发一个android应用程序,它有一个网络视图。我遵循了这一点,但我的活动仍然不是从web视图开始的。如何开始活动?这是我的密码 public class MainActivity extends ActionBarActivity { WebView mWebView; ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState)

我正在开发一个android应用程序,它有一个网络视图。我遵循了这一点,但我的活动仍然不是从web视图开始的。如何开始活动?这是我的密码

    public class MainActivity extends ActionBarActivity {

    WebView mWebView;
    ProgressBar progressBar;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Bundle extras=getIntent().getExtras();

        mWebView = (WebView) findViewById(R.id.webView1);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setAllowFileAccess(true);
        mWebView.setWebViewClient(new MyWebViewClient());
        mWebView.setWebViewClient(new WebViewClient() {



            @Override
            public void onPageFinished(WebView view, String url) {
                //hide loading image
                findViewById(R.id.imageLoading1).setVisibility(View.GONE);
                //show webview
                findViewById(R.id.webView1).setVisibility(View.VISIBLE);
            }




        });
        mWebView.loadUrl("http://fashion.example.com/my-account/");
    }



    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.equals("http://fashion.example.com/my-account/lost-password/")) {
                Intent intent = new Intent(MainActivity.this, MainActivity2.class);
                startActivity(intent);
                return false;
            }else{
                view.loadUrl(url);
                return true;
            }
        }

  }
}
我的xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/vert_loading"
    tools:context="com.apks.mumbaifashion.MainActivity" >

        <ImageView android:id="@+id/imageLoading1"
        android:layout_width="match_parent"
    android:layout_height="match_parent"
        />

    <ProgressBar
            android:id="@+id/progressbar"
            android:layout_width="40dp"
            style="?android:attr/progressBarStyleLarge"
            android:layout_height="40dp"
            android:layout_centerInParent="true" 
            android:visibility="visible"
            android:progressDrawable="@drawable/progress"/>

    <WebView android:id="@+id/webView1"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:visibility="gone"
        />

</RelativeLayout>

我哪里做错了?

您正确设置了自定义的
MyWebViewClient
,但在下面的一行中,您只需将其替换为自定义的。尝试此操作,同时替换
mWebView.setWebViewClient
行:

mWebView.setWebViewClient(new MyWebViewClient() {

    @Override public void onPageFinished(WebView view, String url) {
        //hide loading image
        findViewById(R.id.imageLoading1).setVisibility(View.GONE);
        //show webview
        findViewById(R.id.webView1).setVisibility(View.VISIBLE);
    }

});

这是解决办法之一。您还可以在自定义的
MyWebViewClient
类中实现
onPageFinished
,或者在
WebViewClient
的匿名子类中实现
shouldOverrideAllowing
,我建议您直接从
onPageFinished

比如:

@Override
public void onPageFinished(WebView view, String url) {
       if (url.equals("http://fashion.example.com/my-account/lost-password/")){
           Intent intent = new Intent(MainActivity.this, MainActivity2.class);
           startActivity(intent);                
        }

您必须重写
应重写eurlloding

这应该做到:

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.equals("YOURLINK")) {
            Intent intent = new Intent(getContext(), YourActivity.class);
            startActivity(intent);
            return false;
        }else{
            view.loadURL(url);
            return true;
        }
    }
}
更新:

Caused by: java.lang.ClassCastException:    
com.apks.mumbaifashion.MainActivity2 
cannot be cast to android.app.Activity
例外情况:

Caused by: java.lang.ClassCastException:    
com.apks.mumbaifashion.MainActivity2 
cannot be cast to android.app.Activity
原因:

Caused by: java.lang.ClassCastException:    
com.apks.mumbaifashion.MainActivity2 
cannot be cast to android.app.Activity

您的
MainActivity2
类似乎没有扩展
Activity
。这就是我所能看到的,只有你的
清单
StackTrace

谢谢你的快速回复。我已经替换了以下代码。现在,当我点击我必须开始第二个活动的链接时,我收到了“不幸的是,应用程序已停止”的错误,从你的日志中发布了你的相关部分,您应该会看到有关错误的很多详细信息。我已经发布了日志,错误是“java.lang.RuntimeException:无法实例化活动组件信息{com.apks.mumbaifashion/com.apks.mumbaifashion.YourActivity}:java.lang.ClassCastException:com.apks.mumbaifashion.YourActivity无法转换为android.app.activity”我看不到你代码中的任何地方。它是什么?您在哪里使用它?对不起,它是主要活动2,而不是您的活动。MainActivity2是我的第二个活动,我必须从webview开始