简体   繁体   English

如何将Actionbar项与Viewpager + Fragments一起使用

[英]How to use Actionbar items with Viewpager + Fragments

Im trying to figure out how to implement Actionbar items based on the Fragment that is being loaded inside my viewpager. 我试图找出如何基于我的viewpager中加载的Fragment实现Actionbar项目。 My code is below and im just trying to figure out the best practice for working with ABS + ViewPager + Fragments. 我的代码如下,我只想弄清楚使用ABS + ViewPager + Fragments的最佳实践。

MainActivity 主要活动

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.setAdapter(mAdapter);

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

MainPagerAdapter MainPagerAdapter

public class MainPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> mFragments;
private String[] titles = new String[] {"System", "Community", "Support"};
private int mCount = titles.length;

public MainPagerAdapter(FragmentManager fm, List<Fragment> f) {
    super(fm);
    mFragments = f;
}

@Override
public Fragment getItem(int position) {
    return mFragments.get(position);
}

@Override
public int getCount() {
    return mCount;
}
@Override
public CharSequence getPageTitle(int position) {
    return titles[position];
}

Fragment1 片段1

 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);
    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");   
}

Inside my MainActivity i've tried the following and cant get the code right. 在我的MainActivity中,我尝试了以下内容并且无法正确获取代码。

@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);
}

Im trying to figure out how to implement Actionbar items based on the Fragment that is being loaded inside my viewpager. 我试图找出如何基于我的viewpager中加载的Fragment实现Actionbar项目。

That happens automatically. 这会自动发生。 Just have the fragments call setHasOptionsMenu(true) , then implement onCreateOptionsMenu() and onOptionsItemSelected() . 只需让片段调用setHasOptionsMenu(true) ,然后实现onCreateOptionsMenu()onOptionsItemSelected() The Fragment*PagerAdapter will arrange to repopulate the action bar after a page change, to remove action bar items from the previous page and introduce action bar items from the newly-current page. Fragment*PagerAdapter将安排在页面更改后重新填充操作栏,从上一页中删除操作栏项目并从新当前页面引入操作栏项目。

Here is a sample project demonstrating having action bar items come and go, as only odd-numbered pages (for 1-based indexes, what the user sees) have action bar items. 这是一个示例项目,演示了操作栏项目的来来往往,因为只有奇数页面(对于基于1的索引,用户看到的内容)具有操作栏项目。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM