如何在带有更多片段的操作栏上添加后退按钮

Posted

技术标签:

【中文标题】如何在带有更多片段的操作栏上添加后退按钮【英文标题】:How to add back button on action bar with more fragments 【发布时间】:2016-01-16 18:52:32 【问题描述】:

知道如何在我的操作栏上添加一个后退按钮吗?这里是my acplication,我想在 INFO 按钮之前添加它。 我尝试为操作栏添加该代码,但它不起作用:

  actionBar.setDisplayShowTitleEnabled(false);
  actionBar.setHomeButtonEnabled(true);

这是我的活动:

public class TrailActivity extends FragmentActivity implements ActionBar.TabListener 

SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
Intent intent;
Trail trail;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    intent = getIntent();
    setContentView(R.layout.trail_fracment_main);


    trail = intent.getParcelableExtra("trail");
    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayShowTitleEnabled(false);
    actionBar.setHomeButtonEnabled(true);
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() 
        @Override
        public void onPageSelected(int position) 
            actionBar.setSelectedNavigationItem(position);
        
    );
    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) 
        actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
    


@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 
    // When the given tab is selected, tell the ViewPager to switch to the corresponding page.
    mViewPager.setCurrentItem(tab.getPosition());


@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 


@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 


public class SectionsPagerAdapter extends FragmentPagerAdapter 

    public SectionsPagerAdapter(FragmentManager fm) 
        super(fm);
    

    @Override
    public Fragment getItem(int position) 
        if (position == 0) 
            InfoFragments infoFragments = new InfoFragments();
            infoFragments.setTrail(trail);
            Fragment fragment = infoFragments;
            return fragment;
         else if (position == 1) 
            return new MapFragments();

         else 
            return new WondersFragments();
        

    

    @Override
    public int getCount() 
        return 3;
    

    @Override
    public CharSequence getPageTitle(int position) 
        Locale l = Locale.getDefault();
        switch (position) 
            case 0:
                return getString(R.string.title_section1).toUpperCase(l);
            case 1:
                return getString(R.string.title_section2).toUpperCase(l);
            case 2:
                return getString(R.string.title_section3).toUpperCase(l);
        
        return null;
    

编辑: 在左侧,它应该是如何使用后退按钮来查看我的操作栏,而在右侧,它实际上是我现在的应用程序。所以..我怎样才能让它看起来像左边的应用程序?

如果有人知道,请告诉我我该怎么做。

谢谢:D

【问题讨论】:

请裁剪图像并仅将图像的相关部分放在问题正文中。 @RezaAghaei 我已经在我的应用程序中添加了照片以及我需要做什么......所以,如果你知道我该怎么做......请告诉我。 【参考方案1】:

实现 OnBackStackChangedListener 并将此代码添加到您的 Fragment Activity。

@Override
public void onCreate(Bundle savedInstanceState) 
    //Listen for changes in the back stack
    getSupportFragmentManager().addOnBackStackChangedListener(this);
    //Handle when activity is recreated like on orientation Change
    shouldDisplayHomeUp();


@Override
public void onBackStackChanged() 
    shouldDisplayHomeUp();


public void shouldDisplayHomeUp()
   //Enable Up button only  if there are entries in the back stack
   boolean canback = getSupportFragmentManager().getBackStackEntryCount()>0;
   getSupportActionBar().setDisplayHomeAsUpEnabled(canback);


@Override
public boolean onSupportNavigateUp() 
    //This method is called when the up button is pressed. Just the pop back stack.
    getSupportFragmentManager().popBackStack();
    return true;

如果您在 ActionBar 选项卡旁边寻找返回箭头。使用 Sherlock 可以做到。试试这个

https://***.com/a/12703960/2365507

【讨论】:

不管用还是不行...我没有返回按钮。 @vlad 如果你使用 actionBar.setHomeButtonEnabled(true);它将启用操作栏中的后退按钮。 如果您可以在我的代码中看到...它已启用但我没有按钮 :( @vlad 我编辑了我的答案,请检查并告诉我。 我用过你的代码和那行代码 boolean canback = getSupportFragmentManager().getBackStackEntryCount() > 0;每次都给我假,所以...我每次都会有 getActionBar().setDisplayHomeAsUpEnabled(false);你知道为什么吗?

以上是关于如何在带有更多片段的操作栏上添加后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

在Fragment上不调用onOptionsItemSelected()方法

如果在 WebView 片段中按下后退按钮,如何返回上一页?

如何删除和添加导航栏上的“返回按钮”

如何覆盖android中的操作栏后退按钮?

自定义后退按钮图像在导航栏上不起作用

onOptionsItemSelected() 方法不会在 Fragment 上调用