Android Studio: как я могу загрузить URL в WebView на фрагмент, нажав кнопку на том же фрагменте - PullRequest
0 голосов
/ 14 декабря 2018

Я читаю ответы в этой теме

И я попробовал, все заработало.Но он открыл новый диалог с загруженным URL-адресом, и это не совсем то, что я хотел.

Я хотел, чтобы URL был загружен прямо в элемент WebView под моей кнопкой.Итак, в основном у меня есть фрагмент, и у меня есть элемент EditText, Button и WebView внутри этого фрагмента.Что я хочу сделать, это нажать на кнопку «поиск» и загрузить URL-адрес из EditText прямо в WebView, расположенный прямо под кнопкой и элементами EditBox.Я не хочу, чтобы он открывал мой браузер или новый диалог.

Мне удалось автоматически загрузить некоторые URL-адреса в WebView, когда вы переходите к этому фрагменту в приложении, но когда я пытался загрузить некоторые URL-адреса при нажатии кнопки, приложение просто зависало.Я пытался найти решение этой проблемы много, прежде чем создавать этот поток, но, похоже, никто не имеет такой же проблемы.

Вот мой фрагмент_основной.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 голосов
/ 14 декабря 2018

Вы делаете ошибку здесь WebView webz = (WebView) view.findViewById(R.id.webV); В onClick(View view) виде - кнопка, по которой вы нажали.Так что вы не найдете ни Webview, ни EditText.Внутри onClick вместо инициализации webz и et вы можете сделать web final и инициализировать et до btn.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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...