2016-12-20 3 views
2

Я хочу показать текущее URL из WebView в пункте меню SearchView. Я знаю, что для получения URL мне нужно использовать метод WebViewgetUrl(), но я не знаю, как его показать после поиска запроса.показать URL-адрес в поисковой системе android

Вот мой код:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_main, menu); 

    MenuItem searchItem = menu.findItem(R.id.action_search); 

    final SearchView searchView = (SearchView)searchItem.getActionView(); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      String url = "https://www.google.com/search?q="+query; 
      PlaceholderFragment.mWebView.loadUrl(url); 
      searchView.clearFocus(); 
      return true; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      return false; 
     } 
    }); 
    return true; 
} 

Кроме того, как я добавляю возможность скопировать и вставить этот URL?

+0

Вы можете уточнить свое требование? », Но я не знаю, как показать его после поиска запроса,« вы имеете в виду после того, как пользователь что-то ищет. url? –

+0

скрыть ваш поиск и показать текст с URL-адресом – lewkka

+0

@ Charuka, извините за плохой английский. Да, я имею в виду это «после того, как пользователь что-то ищет. Вам нужно отобразить этот URL-адрес» – androiddev

ответ

1

Вы можете использовать что-то подобное? Вы получите пользователь изменил URL в shouldOverrideUrlLoading метод

PlaceholderFragment.mWebView.setWebViewClient(new WebViewClient(){ 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView wView, String url) 
    { 
     searchView.setQuery(url, false); 
     wView.loadUrl(url); 
     return true; 
    } 
}); 
final SearchView searchView = (SearchView)searchItem.getActionView(); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      String url = "https://www.google.com/search?q="+query; 
      PlaceholderFragment.mWebView.loadUrl(url); 
      searchView.clearFocus(); 
      return true; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      return false; 
     } 
    }); 

Если какой-либо вопрос, позвольте мне сейчас

Update

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu, menu); 
      searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 

     int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); 
     EditText editText = (EditText) searchView.findViewById(id); 
} 

меню XML

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/action_search" 
     android:actionLayout="@layout/my_search_view" 
     android:actionViewClass="android.widget.SearchView" 
     android:icon="@android:drawable/ic_menu_search" 
     android:showAsAction="always" 
     android:title="Search" /> 
</menu> 

Теперь вы можете используйте этот edittext. Это просто рубить из SearchView ...

Теперь вы можете сделать selectAll по щелчку searchView

editText.selectAll(); 
+0

Должен ли я использовать этот метод в методе onQueryTextSubmit() для загрузки запроса, который я положил? Я также переопределил метод shouldOverrideUrlLoading (WebView wView, String url) в этом действии. – androiddev

+0

Нет необходимости. Вы можете поместить вне этого метода 'onQueryTextSubmit()', просто добавленный код –

+0

@androiddev, см. Отредактированный код. –

0

когда пользователь нажимает на searchView удалить весь текст в том, что (если есть) проверить this

начните загружать сведения, которые пользователь искал в вашем webView

Используйте прослушиватель с веб-просмотром и вызывайте его каждый раз после начала загрузки веб-вид для нового поиска

здесь я добавляю все методы переопределения, что вам нужно знать, но нет необходимости использовать их все ..

Если вы хотите до загрузки страницы можно отобразить нагрузку. . смотреть на комментарии

boolean loadingFinished = true; 
boolean redirect = false; 

    mWebView.setWebViewClient(new WebViewClient() { 

    @Override 
    public boolean shouldOverrideUrlLoading(
      WebView view, WebResourceRequest request) { 
     if (!loadingFinished) { 
      redirect = true; 
     } 

     loadingFinished = false; 
     webView.loadUrl(request.getUrl().toString()); 
     return true; 
    } 

    @Override 
    public void onPageStarted(
      WebView view, String url, Bitmap favicon) { 
     super.onPageStarted(view, url, favicon); 
     loadingFinished = false; 
     //SHOW LOADING IF IT ISNT ALREADY VISIBLE 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     if(!redirect){ 
      loadingFinished = true; 
     } 

     if(loadingFinished && !redirect){ 
      //HIDE LOADING IT HAS FINISHED 
     } else{ 
      redirect = false; 
     } 
    } 
}); 

Теперь найти лучшее место, куда вы хотите, чтобы отобразить данные пользователю в том, что searchView например: когда только страница началась загрузка, когда его полный нагруженный

затем установить его с помощью этого searchView.setQuery(url, false); внутри этого выбранного метода переопределения, например: внутри onPageFinished

+0

спасибо за ваш ответ, но я воспользовался решением Mayur Raval – androiddev

+0

, которого вы приветствуете :) –

Смежные вопросы