现在我有一个典型的主/细节模式,在细节区域,我应该显示某种选项卡结构,但与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