如何在主/细节片段中获得支持操作栏来设置NAVIGATION_MODE_TABS



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

在Single-Pane-Mode(当使用设备时)detail区域内,我部署了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){        
    }
}

上面的代码工作完美,但我需要一种方法来实现相同的功能在双窗格模式(实际上是平板屏幕)。在Two-Pane的细节区域部署了一个片段,所以我需要调用支持操作栏,并使用ViewPager实现滑动功能,但是当我把ActionBar转换为AreaDetailActivity(从ActionBarActivity扩展)时,它显示了一个转换错误。这是我的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){        
    }
}

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

不错的滑动/TAP/PAGES教程:http://indyvision.net/2014/08/android-tutorial-screen-with-tabs-and-swipe-part-i/

ACTION BAR技术信息:http://developer.android.com/guide/topics/ui/actionbar.html

unbuen tutorial sobre SWIPE/TAP/PAGES: http://indyvision.net/2014/08/android-tutorial-screen-with-tabs-and-swipe-part-i/

Información tsamcnica sobre操作栏:http://developer.android.com/guide/topics/ui/actionbar.html

最新更新