繁体   English   中英

从片段更改ActionBar标题

[英]Change ActionBar title from Fragment

我有四个片段

问题

当我在两个fragment之间跳转时,每个fragment中都没有显示正确的标题。

我创建了一个gif来显示: http://i.imgur.com/QFTdH3w.gif

标题应与每个片段中的文本相同。

我的MainActivity看起来像这样:

public class MainActivity extends AppCompatActivity {  
    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new InfoFragment(), "INFO");
        adapter.addFragment(new NavFragment(), "NAV");
        adapter.addFragment(new PetrolFragment(), "PETROL");
        adapter.addFragment(new CalcFragment(), "CALC");
        viewPager.setAdapter(adapter);
    }

    public void setActionBarTitle(String title) {
        getSupportActionBar().setTitle(title);
    }

我的每个片段如下所示:

public class InfoFragment extends Fragment {

    public InfoFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ((MainActivity) getActivity()).setActionBarTitle("INFO"); // here are other names according to each fragment
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        return inflater.inflate(R.layout.fragment_info, container, false);
    }
}

我不知道这是否是正确的方法,但是您可以将页面更改侦听器添加到viewpager中,并可以在onPageSelected方法中更改标题:

yourViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                // change your title
                // inflate menu
                // customize your toolbar
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

试试下面的代码

对于片段标题:

getActivity().getActionBar().setTitle("Fragment1");

将此行添加到所有片段onCreateOnCreateView方法中

((MainActivity) getActivity()).setActionBarTitle("Your title");

默认情况下在MainActivity设置一个片段

viewPager.setCurrentItem(0);

暂无
暂无

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

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