2016-07-25 2 views
0

Я загружаю локальные htmls в webview с помощью Viewpager. Это отлично работает, и правая страница загружается из WebViewFragment в активность viewpager. Прокрутка или прокрутка отлично работают, но я добавил кнопку меню, чтобы получить заголовок текущего веб-представления и поджарить его. Эта кнопка меню возвращает заголовок веб-просмотра следующих 2 страниц веб-просмотра в представлении.Кнопка меню на ViewPager тосты неправильного положения

Уменьшение значения setOfScreenLimit до 1 тостов заголовка веб-страницы следующей страницы веб-просмотра в представлении. Я не могу установить setOfScreenLimit в 0. Какой самый вероятный способ получить заголовок веб-страницы текущего элемента при нажатии кнопки меню. Мне нужно получить это и сохранить в БД.

Код:

ViewPager

ViewPager pager = (ViewPager) findViewById(R.id.pager); 
    TabsPagerAdapterEnglish pageAdapter = new TabsPagerAdapterEnglish(getSupportFragmentManager()); 

    Bundle extras = getIntent().getExtras(); 
    int value = 0; 
    if (extras != null) { 
     value = extras.getInt("keyHTML"); 
    } 

    pager.setAdapter(pageAdapter); 
    pager.setCurrentItem(value); 
    pager.setOffscreenPageLimit(1); 

адаптер

public class TabsPagerAdapterEnglish extends FragmentPagerAdapter { 
    private static int NUM_ITEMS = 3 

    public TabsPagerAdapterEnglish(FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 

    // Returns total number of pages 
    @Override 
    public int getCount() { 
     return NUM_ITEMS; 
    } 

    // Returns the fragment to display for that page 
    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return WebFragmentEnglish.newInstance(0, "file:///android_asset/page1.html"); 
      case 1: 
       return WebFragmentEnglish.newInstance(1, "file:///android_asset/page2.html"); 
      case 2: 
       return WebFragmentEnglish.newInstance(2, "file:///android_asset/page3.html"); 

      default: 
       return null; 
     } 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
    } 

    } 

WebFragment

public class WebFragmentEnglish extends Fragment { 

// newInstance constructor for creating fragment with arguments 
public static WebFragmentEnglish newInstance(int position, String url) { 
    WebFragmentEnglish fragmentFirst = new WebFragmentEnglish(); 
    Bundle args = new Bundle(); 
    args.putInt("page_position", position); 
    args.putString("keyHTML", url); 
    fragmentFirst.setArguments(args); 
    return fragmentFirst; 
} 

// Store instance variables based on arguments passed 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 

    Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 

    if (null != toolbar) { 
     toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha); 
    } 

    position = getArguments().getInt("page_position", 0); 
    url = getArguments().getString("keyHTML"); 

    toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { 
     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      switch (item.getItemId()) { 
       case android.R.id.home: 
        getActivity().finish(); 
       case R.id.action_addtofav: 
        webView = (WebView) getActivity().findViewById(R.id.webView1); 
        htitle = webView.getTitle(); 
        saveData(); 
        Toast.makeText(getActivity(), htitle + " added to favorite", 
          Toast.LENGTH_SHORT).show(); 
        return true; 
      } 
      return false; 
     } 
    }); 
} 

// Inflate the view for the fragment based on layout XML 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.webview, container, false); 

    webView = (WebView) view.findViewById(R.id.webView1); 
    progressBar = (ProgressBar) view.findViewById(R.id.progressBar); 

    progressBar.setMax(100); 

    webView.setWebViewClient(new WebViewClientDemo()); 
    webView.setWebChromeClient(new WebChromeClientDemo()); 
    webView.setInitialScale(1); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setUseWideViewPort(true); 
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    webView.getSettings().setPluginState(WebSettings.PluginState.ON); 
    webView.getSettings().setLoadsImagesAutomatically(true); 
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    webView.setScrollbarFadingEnabled(false); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
    webView.setOnLongClickListener(new View.OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View arg0) { 
      // TODO Auto-generated method stub 
      return true; 
     } 
    }); 
    webView.setLongClickable(false); 
    webView.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) { 

      progressBar.setProgress(progress); 

     } 
    }); 
    webView.loadUrl(url); 
    return view; 
} 
+0

Я предполагаю, что ошибка в реализации контроллера или в настройке ViewPager, но не может подтвердить, пока не увидите код – Chisko

+0

@Chisko Благодарим вас за ввод. Я добавил код. Пожалуйста, проверьте. –

+0

Другое дело, если кнопка нажата для тоста заголовка внутри макета, раздутого WebViewFragment, он тост правой главы. но с помощью кнопки меню тосты плитки на следующей странице веб-просмотра. Моя мысль - кнопка меню управляется действительностью viewpager и таким образом мешает. –

ответ

0

ViewPager загрузит текущую страницу и следующую страницу (ы) до offScreenLimit. Чтобы получить имя текущей страницы, вам нужно получить текущую позицию адаптера.

Трудно дать более конкретную помощь без отправки кода. Но вы можете использовать метод getCurrentItem ViewPager для получения видимого индекса. Оттуда вы можете либо сравнить его с индексом страницы, которую вы показываете (это работает, если пейджер представления является статическим, а страницы известны заранее), или вы можете использовать этот индекс для получения фрагмента из PagerAdapter и вызова метод, чтобы сохранить имя.

+0

Спасибо, код был добавлен @Ben. если кнопка нажата для тоста заголовка внутри макета, раздутого WebViewFragment, он подтачивает правильный заголовок. но с помощью кнопки меню тосты плитки на следующей странице веб-просмотра. Моя мысль - кнопка меню управляется действительностью viewpager и таким образом мешает. –

0

Я смог решить проблему с ViewPager.

Я удалил экземпляр панели инструментов из фрагмента, чтобы использовать его в действии viewpager. Затем в моем меню опций, вы заметите, что я использовал

webView = (WebView) **getActivity().**findViewById(R.id.webView1); 

я удалил это полностью, так как я уже определил его в onCreateView, я думаю, может быть это из-за поля getActivity я добавил, чтобы найти WebView ID ,

Я обновлял старый код, я рад, что смог это решить. Спасибо @Chisko и @Ben

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