简体   繁体   English

Android Studio:如何通过单击同一片段上的按钮来在片段的WebView中加载URL

[英]Android Studio: How can I load url in WebView on fragment by clicking a button on the same fragment

I read answers in this thread 我在这个主题中阅读答案

And I tried it, it worked. 我尝试了,它奏效了。 But what it did was it opened a new dialog with the url loaded and that's not exactly what I wanted. 但是它所做的是,它打开了一个新的对话框,并加载了URL,而这并不是我想要的。

I wanted the url to be loaded straight into the WebView element below my button. 我希望将该网址直接加载到按钮下方的WebView元素中。 So basically what I have is a fragment and I have EditText, Button and WebView element all inside of that fragment. 因此,基本上我只有一个片段,并且在该片段中都包含EditText,Button和WebView元素。 What I want to do is click on "search" button and load the url from EditText right into WebView located right below the button and EditBox elements. 我想做的是单击“搜索”按钮,然后将EditText的URL加载到按钮和EditBox元素正下方的WebView中。 I don't want it to open my browser or a new dialog. 我不希望它打开我的浏览器或新对话框。

I have succedeed with automatically loading some url into WebView when you go to that fragment on app, but when I tried to load some url on button click, the app is just crashing. 当您在应用程序上访问该片段时,我成功地将一些URL自动加载到WebView中,但是当我尝试在单击按钮时加载一些URL时,该应用程序崩溃了。 I've tried searching for this issue fix alot before making this thread but nobody seems to have the same problem. 我尝试在制作此线程之前先大量搜索此问题,但似乎没有人遇到相同的问题。

Here's my fragment_main.xml: 这是我的fragment_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".Main">

    <!-- TODO: Update blank fragment layout -->

    <WebView
        android:id="@+id/webV"
        android:layout_width="match_parent"
        android:layout_height="463dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="0dp"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="48dp" />

    <Button
        android:id="@+id/searchBtn"
        android:layout_width="99dp"
        android:layout_height="43dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginTop="0dp"
        android:layout_marginEnd="7dp"
        android:layout_marginRight="7dp"
        android:text="@string/search" />

    <EditText
        android:id="@+id/SVbox"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="@string/search_url"
        android:inputType="text|textPersonName"
        android:autofillHints="" />

</RelativeLayout>

And here in Main.java (the java file for my fragment) I tried this: 在Main.java(我的片段的Java文件)中,我尝试了以下操作:

package com.something.Something;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;

/**
 * A simple {@link Fragment} subclass.
 */
public class Main extends Fragment {



    public Main() {
         //Required empty public constructor

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_main, container, false);

        WebView web = (WebView) view.findViewById(R.id.webV);
        web.setWebViewClient(new WebViewClient());
        web.loadUrl("http://randomsite.com");
        Button btn = (Button) view.findViewById(R.id.searchBtn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EditText et = (EditText) view.findViewById(R.id.SVbox);
                WebView webz = (WebView) view.findViewById(R.id.webV);
                webz.setWebViewClient(new WebViewClient());
                webz.loadUrl("" + et.getText());
            }
        });
        return view;

    }



}

When I click on button, the app crashes.. I don't know what is the issue even after long research. 当我单击按钮时,应用程序崩溃。即使经过长时间研究,我也不知道问题出在哪里。 I'm very new to Android Studio by the way, any help appreciated. 顺便说一句,我是Android Studio的新手,不胜感激。

You are making mistake here WebView webz = (WebView) view.findViewById(R.id.webV); 您在这里犯了错误WebView webz = (WebView) view.findViewById(R.id.webV); In onClick(View view) view is the button that got clicked. onClick(View view)视图中,是单击的按钮。 So you wouldn't find any Webview and EditText . 因此,您将找不到任何WebviewEditText Inside onClick , instead of initializing webz and et you can make web final and initialize et before btn.setOnClickListener . onClick内部,无需初始化webzet ,而可以使web final并在btn.setOnClickListener之前初始化et

Below is the updated code of onCreateView that will work for you. 以下是适用于您的onCreateView的更新代码。

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_main, container, false);

    final WebView web = (WebView) view.findViewById(R.id.webV);
    web.setWebViewClient(new WebViewClient());
    web.loadUrl("http://randomsite.com");
    final Button btn = (Button) view.findViewById(R.id.searchBtn);
    final EditText et = (EditText) view.findViewById(R.id.SVbox);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            web.loadUrl(et.getText().toString());
        }
    });
    return view;

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM