2013-01-20 52 views
2

我的应用在启动时有一个ListView。用户可以手动选择ListView中的项目以转到详细信息屏幕,也可以在不同的详细信息屏幕之间使用ViewPager进行刷卡。该ViewPager's片段设置是这样的:使用ViewPager设置Actionbar标题

 
Listing 
Detail 1 
Detail 2 
Detail 3 
Detail 4 
... 

这是我的理解,装载上市片段时,该ViewPager将执行细节1的代码,性能。当细节1被加载时,细节2的代码将被执行。

我遇到的问题是,我在onActivityCreated中设置了每个细节片段的标题,但是当列表片段被加载时,它正在显示细节1的标题。因此,我将代码移动到ViewPageronPageSelected,这在用户正在滑动时起作用,但如果用户手动选择ListView中的项目,则从未设置标题。

我不确定是否有一个事件只在用户手动选择ListView中的某个项目时触发,而不是当他们正在滑动或者需要重新考虑我的应用程序的设置。例如,而不是在上市片段的onListItemClick事件中使用此代码:

final Intent listing = new Intent(getActivity().getApplicationContext(), Details.class); 
startActivity(listing); 

我需要以某种方式使用ViewPager

mViewPager = (ViewPager)findViewById(R.id.viewpager); 
mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager()); 
mViewPager.setAdapter(mMyFragmentPagerAdapter); 
mViewPager.setSaveEnabled(false); 
mViewPager.setOnPageChangeListener(new OnPageChangeListener() { 

    @Override 
    public void onPageSelected(int position) {  
     String title = GetTitle(position); 
     getSupportActionBar().setTitle(title);     
    } 

    @Override 
    public void onPageScrolled(int position, float offset, int offsetPixel) { 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 

    } 
}); 

回答

3

你可能会想覆盖的方法getPageTitle(int)MyFragmentPagerAdapter类。该文档指出:

这个方法可能被ViewPager调用来获得一个标题字符串,以 描述指定的页面。此方法可能返回null,表示此页面没有 标题。默认实现返回null。

因此,不要返回null,请确保您返回实际的页面标题。您可以通过请求标题的页面位置/索引进行传递,因此只需一个简单的切换语句就足够了。或者,您可以为您的页面设置界面并查询相关页面的标题。

+0

我实际上是通过在细节片段中使用事件回调来工作的,而不是启动一个新的活动,当点击ListView中的一个项目并将标题更新代码保存在onPageSelected中时 –