2

我的应用程序有一个ListView启动。用户可以手动选择一个项目ListView以进入详细信息屏幕,也可以ViewPager在不同的详细信息屏幕之间滑动。ViewPager's片段设置如下:

清单
细节 1
细节 2
细节 3
细节 4
...

我的理解是,当加载清单片段时,ViewPager将执行 Detail 1 的代码,以提高性能。同样,当加载细节 1 时,细节 2 的代码将执行。

我遇到的问题是我在 中设置每个细节片段的标题onActivityCreated,但是,当列表片段被加载时,它显示细节 1 的标题。因此,我将代码移至onPageSelectedViewPager,如果用户正在滑动,则该代码有效,但如果用户手动选择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) {

    }
});
4

1 回答 1

3

您可能希望覆盖类中的getPageTitle(int)方法MyFragmentPagerAdapter。该文档指出:

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

因此,不要返回null,而是要确保返回实际的页面标题。您获得了请求标题的页面的位置/索引,因此一个简单的 switch-case 语句就足够了。或者,您可以为您的页面设置一个界面并查询相关页面的标题。

于 2013-01-20T18:25:47.930 回答