【问题标题】:Android Studio: How can I load url in WebView on fragment by clicking a button on the same fragmentAndroid Studio:如何通过单击同一片段上的按钮在片段上的 WebView 中加载 url
【发布时间】:2018-12-14 14:22:40
【问题描述】:

我在this thread阅读了答案

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

我希望将 url 直接加载到按钮下方的 WebView 元素中。所以基本上我所拥有的是一个片段,我在该片段中都有 EditText、Button 和 WebView 元素。我想要做的是单击“搜索”按钮,然后将 url 从 EditText 加载到位于按钮和 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 很陌生,感谢您的帮助。

【问题讨论】:

    标签: java android android-fragments webview


    【解决方案1】:

    你在这里犯了错误WebView webz = (WebView) view.findViewById(R.id.webV);onClick(View view) 视图中是被点击的按钮。所以你不会找到任何WebviewEditText。 在onClick 内部,您可以将web 设为final 并在btn.setOnClickListener 之前初始化et,而不是初始化webzet

    下面是更新后的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;
    
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-12
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多