【问题标题】:How to get Support Action Bar inside a Master/Detail Fragment to set NAVIGATION_MODE_TABS?如何在主/详细片段中获取支持操作栏以设置 NAVIGATION_MODE_TABS?
【发布时间】:2015-07-07 23:55:00
【问题描述】:

现在我有一个典型的主/细节模式,在细节区域内我应该显示某种选项卡结构,但使用 ViewPager 以实现在这些选项卡之间切换的滑动功能。

在详细信息区域内的单窗格模式(使用设备时)中,我部署了 AreaDetailActivity。在这个活动内部,我调用 supportActionBar (v7),设置导航模式,并设置选项卡,如下所示:

public class AreaDetailActivity extends ActionBarActivity implements ActionBar.TabListener {    

    private ViewPagerAdapter viewPagerAdapter;
    private ViewPager viewPager;    

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView( R.layout.view_pager );

        String idTipoAreaActual = getIntent().getStringExtra(  AreaDetailFragment.ARG_ITEM_ID );

        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode( ActionBar.NAVIGATION_MODE_TABS );

        //Adapter that returns the selected fragment
        viewPagerAdapter = new ViewPagerAdapter( this, idTipoAreaActual, getSupportFragmentManager() );

        viewPager = (ViewPager) findViewById( R.id.view_pager );
        viewPager.setAdapter( viewPagerAdapter );

        viewPager.setOnPageChangeListener( new ViewPager.SimpleOnPageChangeListener(){
            @Override
            public void onPageSelected( int position ){
                actionBar.setSelectedNavigationItem( position );
            }
        });

        actionBar.addTab( actionBar.newTab().setText("Tab1").setTabListener(this) );
        actionBar.addTab( actionBar.newTab().setText("Tab2").setTabListener(this) );
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) {
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) {
        viewPager.setCurrentItem( tab.getPosition() );
    }

    @Override
    public void onTabUnselected(Tab arg0, FragmentTransaction arg1){        
    }
}

上面的代码完美运行,但我需要一种方法在双窗格模式(实际上是平板电脑屏幕)中实现相同的功能。在双窗格中,详细信息区域部署了一个片段,因此我需要调用支持操作栏并使用 ViewPager 实现滑动功能,但是当我将 ActionBar 转换为 AreaDetailActivity(从 ActionBarActivity 扩展)时,它显示了一个 Casting错误。这是我在双窗格模式下显示的 AreaDetailFragment:

public class AreaDetailFragment extends Fragment implements ActionBar.TabListener {

    private Activity activity;
    private ViewPagerAdapter viewPagerAdapter;
    private ViewPager viewPager;

    public AreaDetailFragment( Activity activity ) {
        this.activity = activity;
    }   

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu( true );
    }

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater){
        super.onCreateOptionsMenu(menu, menuInflater);
        menuInflater.inflate(R.menu.ccmaction_bar, menu);
    }   

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate( R.layout.view_pager, container, false );  
        return view;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState){
        super.onViewCreated(view, savedInstanceState);

        String idTipoAreaActual = getArguments().getString( AreaDetailFragment.ARG_ITEM_ID );

        final ActionBar actionBar = ( (AreaDetailActivity) getActivity()).getSupportActionBar();
        actionBar.setNavigationMode( ActionBar.NAVIGATION_MODE_TABS );

        viewPagerAdapter = new ViewPagerAdapter( getActivity().getApplicationContext(), idTipoAreaActual, getChildFragmentManager() );

        viewPager = (ViewPager) view.findViewById( R.id.view_pager );
        viewPager.setAdapter( viewPagerAdapter );       

        viewPager.setOnPageChangeListener( new ViewPager.SimpleOnPageChangeListener(){
            @Override
            public void onPageSelected( int position ){
                actionBar.setSelectedNavigationItem( position );
            }
        });  
    } 

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) {
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) {
        viewPager.setCurrentItem( tab.getPosition() );
    }

    @Override
    public void onTabUnselected(Tab arg0, FragmentTransaction arg1){        
    }
}

有什么想法???谢谢你的时间!!!

【问题讨论】:

  • 你能告诉我们你的 XML 布局吗?

标签: android android-fragments android-actionbar android-viewpager master-detail


【解决方案1】:
猜你喜欢
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 2016-12-17
  • 2012-08-14
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多