我在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的新手,感谢您的帮助。
答案 0 :(得分:2)
您在这里犯错了WebView webz = (WebView) view.findViewById(R.id.webV);
在onClick(View view)
视图中是单击的按钮。因此,您将找不到任何Webview
和EditText
。
在onClick
内部,您可以使webz
最终并在et
之前初始化web
,而不必初始化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;
}