1

У меня есть ViewPager, каждый вид которого является WebView. Я бы хотел, если пользователь нажимает на ссылку в одном из WebViews, чтобы установить заголовок Actionbar на текущую веб-страницу.Установить заголовок страницы WebView из фрагмента

Я надеялся, что смогу использовать shouldOverrideUrlLoading, но название страницы всегда на предыдущей странице. Поэтому, если пользователь нажимает на ссылку 1, затем ссылается на 2 и ссылку 3. На странице 3 заголовок ссылки 2 отображается в Actionbar.

Если я ставлю код установки заголовка в onPageFinished, заголовок страницы создается на следующий вид на ViewPager, в связи с выполнением ViewPager предыдущим/следующим представлением для исполнения.

Фрагмент

public class Browser extends SherlockFragment { 

    private OnBrowserSetTitle mBrowserSetTitle; 

    @Override 
    public void onAttach(Activity act) { 
     super.onAttach(act); 
     mBrowserSetTitle = (OnBrowserSetTitle)act; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 

     activity = getActivity(); 

     setHasOptionsMenu(true); 

     mWebView = (WebView)getView().findViewById(R.id.webview); 
     mWebView.loadUrl("http://www.google.com"); 

     mWebView.setWebViewClient(new WebViewClient() { 

      public void onPageFinished(WebView view, String url) { 

      } 

      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        view.loadUrl(url); 
        if (view.getTitle() != null && view.getTitle().length() > 0) 
        { 
         mBrowserSetTitle.onBrowserSetTitle(mTitle); 
        } 

       return true; 
      }    
     }); 
    } 
} 

активность

public class BrowserPager extends SherlockFragmentActivity implements Interfaces.OnBrowserSetTitle { 

    @Override 
    public void onCreate(final Bundle icicle) 
    {  
     super.onCreate(icicle); 

     setContentView(R.layout.browser_pager); 
    } 

    @Override 
    public void onBrowserSetTitle(String title) { 
     getSupportActionBar().setTitle(title); 
    } 
} 

ответ

1

Изменение onBrowserSetTitle иметь следующее определение:

@Override 
public void onBrowserSetTitle(String title, View view) { 
    if (mViewPager.getCurrentItem() == mViewPager.getAdapter().getItemPosition(view)) { 
     getSupportActionBar().setTitle(title); 
    } 
} 

, а затем вызвать onBrowserSetTitle от onPageFinished примерно так:

@Override 
public void onPageFinished(WebView view, String url) { 
    if (view.getTitle() != null && view.getTitle().length() > 0) { 
     mBrowserSetTitle.onBrowserSetTitle(mTitle, view); 
    } 
} 
+0

Я думаю, вы можете быть смущены. Я могу обрабатывать заголовок страницы, когда пользователь перебирает между представлениями, но если пользователь находится в одном конкретном «WebView» и нажимает на ссылку на самой веб-странице, вот где я столкнулся с проблемой. –

+0

@ KrisB я вижу. Я обновил свой ответ. – Tushar

+0

спасибо за ответ. Если вы заметили в моем первоначальном вопросе, я попробовал 'onPageFinished', однако, с тем, как работает« ViewPagers », они выполняют предыдущие и следующие представления для производительности, поэтому, если я устанавливаю заголовок в' onPageFinished', по мере того, как пользователь проводит , заголовок показывает неправильный заголовок. –

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