首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Actionbar项与Viewpager +片段一起使用

如何将Actionbar项与Viewpager +片段一起使用
EN

Stack Overflow用户
提问于 2013-05-31 03:23:40
回答 1查看 8.9K关注 0票数 8

我正在尝试弄清楚如何基于加载到我的viewpager中的片段来实现Actionbar项。我的代码如下,我只是想找出使用ABS + ViewPager +片段的最佳实践。

MainActivity

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
 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");   
}

在我的MainActivity中,我尝试了下面的方法,但是没有得到正确的代码。

代码语言:javascript
复制
@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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-31 07:42:59

我正在尝试弄清楚如何基于加载到我的viewpager中的片段来实现Actionbar项。

这是自动发生的。只需让片段调用setHasOptionsMenu(true),然后实现onCreateOptionsMenu()onOptionsItemSelected()即可。Fragment*PagerAdapter将安排在页面更改后重新填充动作栏,以便从前一页中删除动作栏项目,并从新当前页面中引入动作栏项目。

Here is a sample project演示了动作栏项目的来来去去,因为只有奇数页(基于1的索引,用户看到的页面)才有动作栏项目。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16844288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档