如何使用动作条项目进行Viewpager +片段 [英] How to use Actionbar items with Viewpager + Fragments

查看:138
本文介绍了如何使用动作条项目进行Viewpager +片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试着去弄清楚如何根据正被我viewpager里面装的片段来实现动作条的项目。我的code是下方,我只是试图找出的最佳实践与ABS + ViewPager +碎片的工作。

MainActivity

 公共类MainActivity扩展SherlockFragmentActivity {
私人ViewPager mPager;
私人TitlePageIndicator mIndicator;
私人MainPagerAdapter mAdapter;
私人列表<片断> mFragments;

私有静态最后弦乐片段1 = Fragment1.class.getName();
私有静态最后弦乐FRAGMENT2 = Fragment2.class.getName();
私有静态最后弦乐FRAGMENT3 = SupportFragment.class.getName();

@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.a_main);

    //添加片段
    mFragments =新的ArrayList<片断>();
    mFragments.add(Fragment.instantiate(这一点,片段1));
    mFragments.add(Fragment.instantiate(这一点,FRAGMENT2));
    mFragments.add(Fragment.instantiate(这一点,FRAGMENT3));

    // 适配器
    mAdapter =新MainPagerAdapter(getSupportFragmentManager(),mFragments);

    //寻呼机
    mPager =(ViewPager)findViewById(R.id.view_pager);
    mPager.setAdapter(mAdapter);

    // 指示符
    mIndicator =(TitlePageIndicator)findViewById(R.id.title_indicator);
    mIndicator.setViewPager(mPager);
}
  ...
 

MainPagerAdapter

 公共类MainPagerAdapter扩展FragmentPagerAdapter {
私人列表<片断> mFragments;
私有String []标题=新的String [] {系统,社区,支持};
私人诠释mCount = titles.length;

公共MainPagerAdapter(FragmentManager FM,名单,其中,片断> F){
    超(FM);
    mFragments = F;
}

@覆盖
公共片段的getItem(INT位置){
    返回mFragments.get(位置);
}

@覆盖
公众诠释getCount将(){
    返回mCount;
}
@覆盖
公共CharSequence的getPageTitle(INT位置){
    回到标题[位置]
}
 

片段1

 公共类片段1扩展SherlockFragment {
的WebView网页;
静态进度的进度;

@覆盖
公共查看onCreateView(LayoutInflater INF,ViewGroup中GRP,捆绑冰柱){
    视图V = inf.inflate(R.layout.activity_main,GRP,假);
    网页=(web视图)v.findViewById(R.id.webView);
    进度=(进度)v.findViewById(R.id.progressBar1);
    返回伏;
}
@覆盖
公共无效onActivityCreated(包savedInstanceState){
    super.onActivityCreated(savedInstanceState);
    web.setWebViewClient(新SpecialWebView(进度));
    web.setWebChromeClient(新SpecialWebChromeClient(进度));
    //进度条 - 完

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

在我MainActivity我已经尝试了以下内容并不能得到code正确。

  @覆盖
公共布尔onCreateOptionsMenu(功能菜单){
    MenuInflater充气= getSupportMenuInflater();
    Inflater.inflate(R.menu.menu,菜单);
    返回true;

}
@覆盖
公共布尔onOptionsItemSelected(菜单项项){
    最终诠释电流=((ViewPager)mFragments).getCurrentItem();
    字符串currentId =当前== 0?片段1:(当前== 1 FRAGMENT2:FRAGMENT3?);
    //的WebView网页=(web视图)findViewById(currentId);
    开关(Item.getItemId()){
    案例R.id.menu_back:
    // web.goBack();
        返回true;
    案例R.id.menu_forward:
        //web.goForward();
        返回true;
    案例R.id.menu_refresh:
        //web.reload();
        返回true;
    }
    返回super.onOptionsItemSelected(项目);
}
 

解决方案
  

我试着去弄清楚如何根据正被我viewpager里面装的片段来实现动作条的项目。

这是自动发生。只是有段叫 setHasOptionsMenu(真),然后实现 onCreateOptionsMenu() onOptionsItemSelected( )。该片段* PagerAdapter 将安排重新填充操作栏页面改变后,从previous页从newly-删除操作栏项目,并引入操作栏项目当前页面。

下面是一个示例项目证明其操作栏项目来来去去,因为仅奇数页(1为基础的索引,用户看到的)有所动作栏项目。

Im trying to figure out how to implement Actionbar items based on the Fragment that is being loaded inside my viewpager. My code is below and im just trying to figure out the best practice for working with 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

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

 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.

@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.

That happens automatically. Just have the fragments call setHasOptionsMenu(true), then implement onCreateOptionsMenu() and 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.

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.

这篇关于如何使用动作条项目进行Viewpager +片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆