75% примеров веб-браузера Android не используют EditText, чтобы пользователь мог изменять URL-адреса. В этих последних 25%, которые дают вам образец EditText для изменения URL-адреса, они останавливаются и не подсказывают вам, как поддерживать этот URL-адрес EditText в обновленном состоянии после завершения загрузки страницы. Часто мой отображаемый URL не соответствует текущей странице, на которую я был перенаправлен.
Проблема, похоже, в том, что я хотел бы поместить класс MyWebViewClient в файл Java отдельно от основного действия. Мой пользовательский WebViewClient позволяет мне использовать метод переопределения onPageFinished (представление WebView, строковый URL-адрес) для обновления моей переменной, когда страница завершает загрузку, но я сталкиваюсь с препятствием, когда это оказывается поле редактирования текста основных действий.
Итак, кто-то упомянул об использовании обратного вызова для TextView в основном действии, поэтому я подумал, что это может быть аналогичная ситуация. Я просто не знаю, сработает ли уловка обратного вызова. Возможно, есть совершенно другой способ решить проблему с обновлением элемента EditText после каждой загрузки страницы.
Вот моя ошибка:
MyWebViewClient (MyCallBack)in MyWebViewClient cannot be applied to ()
Вот моя основная деятельность
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_browser);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
myWebView = (WebView) findViewById(R.id.webView);
WebSettings webSettings=myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.setWebViewClient(new MyWebViewClient());//<---Error here
editText = (EditText) findViewById(R.id.url_search);
...
}
Вот файл класса MyWebViewClient.java
package com.example.owner.webbrowserwithnavigation;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.TextView;
import java.net.URI;
import java.net.URISyntaxException;
public class MyWebViewClient extends WebViewClient {
MyCallBack mCallBack = null;
public MyWebViewClient(MyCallBack callBack){
this.mCallBack=callBack;
}
public void onPageFinished(WebView view, String url) {
this.mCallBack.UpdateMyText(url);
}
}
Вот файл класса MyCallback.java
package com.example.owner.webbrowserwithnavigation;
interface MyCallBack
{
// Declaration of the template function for the interface
public void UpdateMyText(String mystr);
}
Может, я ошибаюсь. Возможно, есть простой способ сделать это, но WebViewClient должен обновить EditText из основного действия после загрузки страницы, поэтому мне кажется, что мне нужно вызвать его из WebViewClient.
Спасибо за любые советы.
Да, у меня есть текст редактирования для основного действия, и у меня также есть веб-просмотр, который отображает это основное действие. Код из настраиваемого клиента webview не может получить доступ к основным действиям url_edittext после завершения загрузки веб-просмотра.
Используйте MyWebViewClient следующим образом:
1. Использование анонимного класса
myWebView.setWebViewClient(new MyWebViewClient(new MyCallBack(){
@Override
public void UpdateMyText(String mystr) {
editText.setText(mystr);
}
}));
вместо
myWebView.setWebViewClient(new MyWebViewClient());
2. ИЛИ Реализуя обратный вызов
public class YourActivity extends AppCompatActivity implements MyCallBack{
......
......
@Override
public void UpdateMyText(String mystr) {
editText.setText(mystr);
}
}
затем установите клиент веб-просмотра, например:
myWebView.setWebViewClient(new MyWebViewClient(this));
Спасибо @Deven, ты гений :-). Мне нужно больше практики с такими обратными вызовами через классы. Это сработало. Я отмечу его как принятый ответ через пару дней, если никто не ответит более простым способом - просто изменить текст редактирования из моего настраиваемого клиента webview.
Добро пожаловать, сначала я использовал анонимный класс, может быть, это кажется немного сложным, тогда вы также можете попробовать второй способ (я редактировал и).
Отлично @ Девен. Вариант 2 мне больше нравится. Просто интересно, есть ли другой способ сделать это без обратного вызова.
У вас есть edittext и webview, и вам нужно, чтобы URL-адрес был установлен в edittext при загрузке webview finish.right?