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

时间:2018-12-14 14:22:40

标签: java android android-fragments webview

我在this thread中读了答案

我尝试了,它奏效了。但是它所做的是,它打开了一个新的对话框,并加载了URL,而这并不是我想要的。

我希望将该URL直接加载到按钮下方的WebView元素中。因此,基本上我只有一个片段,并且在该片段中都包含EditText,Button和WebView元素。我想做的是单击“搜索”按钮,然后将EditText的URL加载到按钮和EditBox元素正下方的WebView中。我不希望它打开我的浏览器或新对话框。

当您在应用程序上访问该片段时,我成功地将一些URL自动加载到WebView中,但是当我尝试在单击按钮时加载一些URL时,该应用程序崩溃了。我尝试在创建此线程之前先大量搜索此问题,但似乎没有人遇到相同的问题。

这是我的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>

在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;

    }



}

当我单击按钮时,应用程序崩溃。即使经过长时间的研究,我也不知道问题出在哪里。顺便说一下,我是Android Studio的新手,感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您在这里犯错了WebView webz = (WebView) view.findViewById(R.id.webV);onClick(View view)视图中是单击的按钮。因此,您将找不到任何WebviewEditText。 在onClick内部,您可以使webz最终并在et之前初始化web,而不必初始化etbtn.setOnClickListener

下面是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;

}