我正在使用Sherlock库使用ActionBar。在此应用程序中也实现了选项卡。
现在,当我在ActionBar中使用NavigationList时,我丢失了Tab片段。为了在ActionBar中使用ListNavigation,我使用了:
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
&安培;在此之前,我使用mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
作为标签,但没有列表。
现在,我想同时使用NavigationList
和Tab Fragments
public class MainActivity extends SherlockFragmentActivity implements OnNavigationListener {
ActionBar mActionBar;
ViewPager mPager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/** Getting a reference to action bar of this activity */
mActionBar = getSupportActionBar();
/** Set tab navigation mode */
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
//mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(
this,
R.array.locations,
android.R.layout.simple_spinner_item);
mActionBar.setListNavigationCallbacks(mSpinnerAdapter, this);
mActionBar.setIcon(R.drawable.app_icon);
/** Getting a reference to ViewPager from the layout */
mPager = (ViewPager) findViewById(R.id.pager);
/** Getting a reference to FragmentManager */
FragmentManager fm = getSupportFragmentManager();
/** Defining a listener for pageChange */
ViewPager.SimpleOnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener(){
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
mActionBar.setSelectedNavigationItem(position);
}
};
/** Setting the pageChange listner to the viewPager */
mPager.setOnPageChangeListener(pageChangeListener);
/** Creating an instance of FragmentPagerAdapter */
MyFragmentPagerAdapter fragmentPagerAdapter = new MyFragmentPagerAdapter(fm);
/** Setting the FragmentPagerAdapter object to the viewPager object */
mPager.setAdapter(fragmentPagerAdapter);
mActionBar.setDisplayShowTitleEnabled(true);
/** Defining tab listener */
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
mPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
};
/** Creating Android Tab */
Tab tab = mActionBar.newTab()
.setText("Android")
.setIcon(R.drawable.android)
.setTabListener(tabListener);
mActionBar.addTab(tab);
/** Creating Apple Tab */
tab = mActionBar.newTab()
.setText("Apple")
.setIcon(R.drawable.apple)
.setTabListener(tabListener);
mActionBar.addTab(tab);
}
}
MyFragmentPagerAdapter.java
public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
final int PAGE_COUNT = 2;
/** Constructor of the class */
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
/** This method will be invoked when a page is requested to create */
@Override
public Fragment getItem(int arg0) {
Bundle data = new Bundle();
switch(arg0){
/** Android tab is selected */
case 0:
AndroidFragment androidFragment = new AndroidFragment();
data.putInt("current_page", arg0+1);
androidFragment.setArguments(data);
return androidFragment;
/** Apple tab is selected */
case 1:
AppleFragment appleFragment = new AppleFragment();
data.putInt("current_page", arg0+1);
appleFragment.setArguments(data);
return appleFragment;
}
return null;
}
/** Returns the number of pages */
@Override
public int getCount() {
return PAGE_COUNT;
}
}
另外两个班级:
1)public class AppleFragment extends SherlockListFragment
2)public class AndroidFragment extends SherlockListFragment
请建议我,为什么我在将List添加到ActionBar时失去了我的标签。
答案 0 :(得分:1)
您不能同时使用NAVIGATION_MODE_LIST
和NAVIGATION_MODE_TABS
。您一次只能使用导航模式。
答案 1 :(得分:1)
ActionBar
中列表导航和标签的使用是互斥的,您只能使用一个。
如果要同时使用列表和选项卡,则必须对其中至少一个使用不同的实现。对于标签,您可以使用ViewPagerIndicator
。 ActionBar
中的微调器可以通过多种方式创建:
actionLayout
或actionViewClass
作为菜单项ActionProvider
作为菜单项 编辑:
在您的情况下,最简单的调整是使用ViewPagerIndicator
而不是ActionBar
标签。更改列表导航需要更多工作。
ViewPagerIndicator
项目的网页显示了一些您应该查看的示例设置。该项目的GitHub page有许多示例,展示了如何使用库的各种设置。我想你要找的是TabPageIndicator
,所以请看this sample(注意标签的标题是在FragmentPagerAdapter
中创建的,你不需要ActionBar.Tab
}和ActionBar.TabListener
了。)