【问题标题】:ViewPager and Menu-Items and WebViewsViewPager 和 Menu-Items 和 WebViews
【发布时间】:2013-05-31 21:27:53
【问题描述】:

有没有办法在我的 MainActivity 中为我的 ViewPager 创建的操作栏创建我的菜单项,这样我只创建一次我的 webview 项(后退、前进和刷新按钮)。然后在我的 onOptions.... 然后指定菜单项以能够处理我的 webview。

我的 ViewPager 中的所有片段都是 webview,我只想要 3 个常量 Actionbar 项来控制正在显示的 webview。而不是每次我的 viewpager 加载另一个片段时都重新创建它们。有什么想法???

片段

public class Fragment1 extends SherlockFragment {
    WebView web;
    static ProgressBar progressBar;

    @Override
    public View onCreateView(LayoutInflater inf, ViewGroup grp, Bundle icicle) {
        View v = inf.inflate(R.layout.activity_main, grp, false);
        web = (WebView) v.findViewById(R.id.webView);
        progressBar = (ProgressBar) v.findViewById(R.id.progressBar1);
        //Now i know that i need this to use MENU ITEMS in this fragment
        setHasOptionsMenu(true);
        //
        return v;
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        web.setWebViewClient(new SpecialWebView(progressBar));
        web.setWebChromeClient(new SpecialWebChromeClient(progressBar));
        // Progress Bar - End

        WebSettings websettings = web.getSettings();
        websettings.setBuiltInZoomControls(false);
        web.setBackgroundColor(Color.parseColor("#f2f2f2"));
        websettings.setUseWideViewPort(true);
        websettings.setJavaScriptEnabled(true);
        websettings.setAllowFileAccess(true);
        websettings.setDomStorageEnabled(true);
        websettings.setLoadWithOverviewMode(true);
        websettings.setSavePassword(true);
        web.loadUrl("http://www.google.com");   
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater Inflater = getSupportMenuInflater();
        Inflater.inflate(R.menu.menu, menu);
        return true;

    }
    @Override
    public boolean onOptionsItemSelected(MenuItem Item) {
        final int current = ((ViewPager) mFragments).getCurrentItem();
        String currentId = current == 0 ? FRAGMENT1: (current == 1 ? FRAGMENT2: FRAGMENT3);
        //WebView web = (WebView) findViewById(currentId);
        switch (Item.getItemId()) {
        case R.id.menu_back:
            web.goBack();
            return true;
        case R.id.menu_forward:
            web.goForward();
            return true;
        case R.id.menu_refresh:
            web.reload();
            return true;
        }
        return super.onOptionsItemSelected(Item);
    }

主要活动

  public class MainActivity extends SherlockFragmentActivity {
private ViewPager mPager;
private TitlePageIndicator mIndicator;
private MainPagerAdapter mAdapter;
private List<Fragment> mFragments;

private static final String FRAGMENT1 = Fragment1.class.getName();
private static final String FRAGMENT2 = Fragment2.class.getName();
private static final String FRAGMENT3 = SupportFragment.class.getName();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.a_main);

    // add fragments
    mFragments = new ArrayList<Fragment>();
    mFragments.add(Fragment.instantiate(this, FRAGMENT1));
    mFragments.add(Fragment.instantiate(this, FRAGMENT2));
    mFragments.add(Fragment.instantiate(this, FRAGMENT3));

    // adapter
    mAdapter = new MainPagerAdapter(getSupportFragmentManager(), mFragments);

    // pager
    mPager = (ViewPager) findViewById(R.id.view_pager);
    mPager.setOffscreenPageLimit(3);
    mPager.setAdapter(mAdapter);

    // indicator
    mIndicator = (TitlePageIndicator) findViewById(R.id.title_indicator);
    mIndicator.setViewPager(mPager);
}

【问题讨论】:

    标签: android actionbarsherlock android-webview android-viewpager menuitem


    【解决方案1】:

    您需要做的是创建一个主布局 xml 文件,并将“静态”按钮放在那里。然后在您想要拥有 ViewPager 的区域中,您只需放置一个 ViewPager。 (取决于您的布局,按钮可能位于 ViewPager 上方/下方/上方/旁边)然后在代码中传递按钮的引用(可能是弱引用,具体取决于您的需要)if 片段需要了解它们。

    另一种方式我读取了这一点(我尚不清楚你想要的东西)你可以简单地为活动创建选项菜单,然后选择选项项目时,只需在活动中调用正确的方法或活动片段.您可以通过implements OnPageChangeListener跟踪活动片段

    我不确定你到底想要什么,但很可能。

    【讨论】:

      【解决方案2】:

      只需将您的onCreateOptionsMenu()onOptionsItemSelected() 实现从片段移动到活动。

      onOptionsItemSelected() 中获取对当前活动片段的WebView 的引用,例如通过将getWebView() 方法添加到您的片段。

      【讨论】:

        【解决方案3】:

        你需要 onPageChangeListener:

        http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html

        维护对当前选中片段的引用,然后根据位置在onPageChangeListener.onPageSelected()中更改对活动片段的引用。

        从那时起,在片段中获取对小部件的引用应该不会太难。正如 cketti 提到的,您必须将 onOptionsItemSelected() 移至活动。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-02
          • 1970-01-01
          • 2012-12-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多