如何使用 url 的 editText 和按钮单击在另一个活动中打开 web 视图

Posted

技术标签:

【中文标题】如何使用 url 的 editText 和按钮单击在另一个活动中打开 web 视图【英文标题】:How do I open a webview in another activity using editText for the url and a button click 【发布时间】:2017-03-10 13:34:13 【问题描述】:

MainActivity.java

public class MainActivity extends Activity 

    WebView web1;
    EditText ed1;
    Button bt1;
    String Address;
    ProgressBar pbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        final Context context = this;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        web1 = (WebView) findViewById(R.id.webView1);
        ed1 = (EditText) findViewById(R.id.editText1);
        bt1 = (Button) findViewById(R.id.button1);

        pbar.setVisibility(View.GONE);

        bt1.setOnClickListener(new View.OnClickListener() 

            @Override
            public void onClick(View arg0) 
                Intent intent = new Intent(context, WebViewActivity.class);
                startActivity(intent);


                Address = "http://" + ed1.getText().toString();
                WebSettings webSetting = web1.getSettings();
                webSetting.setBuiltInZoomControls(true);
                webSetting.setjavascriptEnabled(true);
                setContentView(R.layout.activity_main);

//下面给了我这个错误,说明新的 WebViewClient 无法解决。

                web1.setWebViewClient(new WebViewClient());

                web1.loadUrl(Address);

            
        );
    

WebViewActivity.java

public class WebViewActivity extends Activity 


    WebView web1;

    String Address;
    String add;
    ProgressBar pbar;

    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);

        web1 = (WebView)findViewById(R.id.webView1);

        pbar = (ProgressBar)findViewById(R.id.progressBar1);
        pbar.setVisibility(View.GONE);

        web1.setWebViewClient(new WebViewActivity.WebViewClient());

    


    public class WebViewClient extends android.webkit.WebViewClient
    
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) 

            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
            pbar.setVisibility(View.VISIBLE);
        

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) 

            // TODO Auto-generated method stub
            view.loadUrl(url);
            return true;
        
        @Override
        public void onPageFinished(WebView view, String url) 

            // TODO Auto-generated method stub

            super.onPageFinished(view, url);
            pbar.setVisibility(View.GONE);
        

    

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    
        if ((keyCode == KeyEvent.KEYCODE_BACK) && web1.canGoBack()) 
            web1.goBack();
            return true;
        
        return super.onKeyDown(keyCode, event);
    

【问题讨论】:

看看***.com/questions/2091465/…,可以在activity之间传递url。 确定不能解决?你有一个import android.webkit.WebViewClient,对吧? android.webkit.WebViewClient 的名称已经存在冲突时,也许您不应该将您的 类命名为WebViewClient 当我运行它时它会崩溃 好的,现在显示 logcat。 ***.com/questions/23353173/… 【参考方案1】:

使用 Intent 将 url 作为字符串传递给 webview 活动:

Intent intent = new Intent(context, WebViewActivity.class);
intent.putExtra("URL",url)
startActivity(intent);

并在 WebViewActivity onCreate 中访问它:

Intent in = getIntent();
String url = in.getStringExtra("URL");

现在把这个网址传入

weview.loadurl(url);

MainActivity

public class MainActivity extends AppCompatActivity 

Button b1;
EditText ed1;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    b1 = (Button) findViewById(R.id.button);
    ed1 = (EditText) findViewById(R.id.editText);

    b1.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            String url = ed1.getText().toString();
            Intent intent = new Intent(getApplicationContext(), WebViewActivity.class);
            intent.putExtra("URL", url);
            startActivityForResult(intent, 1);

        
    );




activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:orientation="vertical">

<EditText
    android:id="@+id/editText"
    android:layout_
    android:layout_ />

<Button
    android:id="@+id/button"
    android:layout_
    android:layout_
    android:text="GO"/>

  </LinearLayout>

WebViewActivity

public class WebViewActivity extends AppCompatActivity 

private WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) 

    String url = getIntent().getStringExtra("URL");

    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);
    webView = (WebView) findViewById(R.id.webView);
    webView.setWebViewClient(new MyBrowser());
    webView.getSettings().setLoadsImagesAutomatically(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    webView.loadUrl(url);


private class MyBrowser extends WebViewClient 
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
        view.loadUrl(url);
        return true;
    


webview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_
android:layout_>

<WebView
    android:id="@+id/webView"
    android:layout_
    android:layout_>

</WebView>

</LinearLayout>

AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.mywebviewapplication">

<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".WebViewActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>
</application>

</manifest>

【讨论】:

这里是一步一步的实现。 tutorialspoint.com/android/android_webview_layout.htm @MarkAcquaisie 确保添加互联网权限并在清单文件中添加活动。 你能帮我修改 tutorialspoint 的示例以使其加载到另一个活动中吗?这就是我所寻求的。我是安卓的新手。 @Aayush Thakur 谢谢@Aayush Thaku 检查更新。如果这对您有用,请投票并接受我的回答。

以上是关于如何使用 url 的 editText 和按钮单击在另一个活动中打开 web 视图的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮时如何从java Widgets radioButton,editText读取输入

尝试不显示当我单击表单的 EditText 之一时显示的按钮

如何通过单击 EditText 中的按钮逐个添加数字?

如何使用 ActionDone 按钮(不带 Enter 按钮)实现多行 EditText

如何检查edittext是不是为空?

从 List Adapter Android 中的按钮单击编辑 EditText