1、ActionBar7 ActionBar ViewPager Fragment 实现可左右滑动的Tab页布局ActionBar(7) ActionBar+ViewPager+Fragment 实现可左右滑动的Tab页布局 ActionBar除了可以本身定制VIEW外,还可以利用ActionBar+ViewPager+Fragment 实现一些好用的效果。如本次要说的可左右滑动的Tab页布局。 可左右滑动的Tab页布局的好处在于,用单手左右滑动操作即可,而无须去点击切换Tab页。 要实现可于 ActionBar设为NAVIGATION_MODE_TABS模式,实现Tab. ViewPager用于
2、装载Fragment页面组或View组,使其能左右滑动. Fragment 用自己的布局,自己的生命周期。具体可查. ActionBar和ViewPager的相互配合主要通过ActionBar的TabListener监听和ViewPager的PageChangeListener监听来交互。效果如下:实现步骤如下: 1. 在XML布局文件中指定ViewPager。html view plaincopy<?xml version=1.0 encoding=utf-8?> <LinearLayout xmlns:android= android:layout_width=match
3、_parent android:layout_height=match_parent android:orientation=vertical > <android.support.v4.view.ViewPager android:id=+id/vPager android:layout_width=wrap_content android:layout_height=wrap_content android:layout_gravity=center android:layout_weight=1.0 android:background=#000000 android:fli
4、pInterval=30 android:persistentDrawingCache=animation /> </LinearLayout> 2. 直接上代码工程中 ActionBarActivity 引用自android-support-v7-appcompat扩展包。 具体引用方法可参考点击打开链接java view plaincopypublic class TabBar4Activity extends ActionBarActivity private ActionBar actionBar; private Spinner mActionbarSpinner;
5、 private ViewPager mPager; private ArrayList<View> mViews = null; private ArrayList<Fragment> mFragmentsList; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_tabbar); /得到Bar actionBar = getSupportActionBar()
6、; /设置标题 actionBar.setTitle(ActionBar+ViewPager+Fragment); actionBar.setSubtitle(努力!); /实现用户点击ActionBar 图标后返回前一个activity actionBar.setDisplayHomeAsUpEnabled(true) ; /定义ActionBar模式为NAVIGATION_MODE_TABS actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.addTab(actionBar.newTab() .se
7、tText(t1) .setIcon(R.drawable.ic_launcher) .setTabListener(MyBarTabListener); actionBar.addTab(actionBar.newTab() .setText(t2) .setIcon(R.drawable.ic_launcher) .setTabListener(MyBarTabListener); mPager = (ViewPager)findViewById(R.id.vPager); mFragmentsList = new ArrayList<Fragment>(); Fragment
8、 page1fragment = TabPageFragment.newInstance(ActionBar+ViewPager+Fragment page1); Fragment page2fragment = TabPageFragment.newInstance(ActionBar+ViewPager+Fragment page2); mFragmentsList.add(page1fragment); mFragmentsList.add(page2fragment); mPager.setAdapter(new MyFragmentPagerAdapter(getSupportFra
9、gmentManager(), mFragmentsList); /- mPager.setOnPageChangeListener(new MyPageScrollEvent(); mPager.setCurrentItem(0); SuppressLint(NewApi) Override public boolean onCreateOptionsMenu(Menu menu) / Inflate the menu; this adds items to the action bar if it is present. /添加菜单项 MenuItem findItem = menu.ad
10、d(0,1,0,查找); MenuItem exitItem = menu.add(0,0,0,退出); /绑定到ActionBar findItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); exitItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return true; /* * ActionBar上的Tab页更改 * Public Methods onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) Call
11、ed when a tab that is already selected is chosen again by the user. onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) Called when a tab enters the selected state. onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) Called when a tab exits the selected state. */ private final TabListene
12、r MyBarTabListener = new TabListener() private final static String TAG = MyBarTabListener; Override public void onTabReselected(Tab arg0, FragmentTransaction arg1) / TODO Auto-generated method stub Log.d(TAG,onTabReselected); Override public void onTabSelected(Tab arg0, FragmentTransaction arg1) / T
13、ODO Auto-generated method stub Log.d(TAG,onTabSelected); /当更改ActionBar上的Tab页有更改时,ViewPager显示相关的页面 if (mPager != null) mPager.setCurrentItem(arg0.getPosition(); Override public void onTabUnselected(Tab arg0, FragmentTransaction arg1) / TODO Auto-generated method stub Log.d(TAG,onTabUnselected); ; /*
14、* 用于ViewPager滑动时触发. * * onPageScrollStateChanged(int state) Called when the scroll state changes. onPageScrolled(int position, float positionOffset, int positionOffsetPixels) This method will be invoked when the current page is scrolled, either as part of a programmatically initiated smooth scroll o
15、r a user initiated touch scroll. onPageSelected(int position) This method will be invoked when a new page becomes selected. */ class MyPageScrollEvent implements OnPageChangeListener private final static String TAG = MyPageScrollEvent; Override public void onPageScrollStateChanged(int arg0) / TODO A
16、uto-generated method stub Log.d(TAG,onPageScrollStateChanged); Override public void onPageScrolled(int arg0, float arg1, int arg2) / TODO Auto-generated method stub Log.d(TAG,onPageScrolled); Override public void onPageSelected(int arg0) / TODO Auto-generated method stub Log.d(TAG,onPageSelected); /
17、当滑动ViewPager 换页时,将ActionBar上的Tab显示到对应页 actionBar.selectTab(actionBar.getTabAt(arg0); /* * FragmentPagerAdapter继承自PagerAdapter,是其中的一种实现。 * 它将每一个页面表示为一个 Fragment,并且每一个Fragment都将会保存到fragment manager当中。 * 而且,当用户没可能再次回到页面的时候,fragment manager才会将这个Fragment销毁。. * author XCL * */ public class MyFragmentPager
18、Adapter extends FragmentPagerAdapter private ArrayList<Fragment> fragmentsList; public MyFragmentPagerAdapter(FragmentManager fm) super(fm); public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) super(fm); this.fragmentsList = fragments; Override public Fragmen
19、t getItem(int arg0) / TODO Auto-generated method stub return fragmentsList.get(arg0); Override public int getCount() / TODO Auto-generated method stub return fragmentsList.size(); /* * 菜单事件响应 */ public boolean onOptionsItemSelected(MenuItem item) / TODO Auto-generated method stub switch (item.getIte
20、mId() case 0: /displayToast(退出菜单); break; case 1: /displayToast(查找菜单); break; case android.R.id.home: Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); Toast.makeText(getApplicationContext(),
21、android.R.id.home, 0) .show(); break; default: /action_compose break; return super.onOptionsItemSelected(item); TabPageFragment.javajava view plaincopypublic class TabPageFragment extends Fragment private static final String TAG = TabPageFragment; private String pagInfo; static TabPageFragment newIn
22、stance(String s) TabPageFragment newFragment = new TabPageFragment(); Bundle bundle = new Bundle(); bundle.putString(fgArg, s); newFragment.setArguments(bundle); return newFragment; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); Log.d(TAG, TabPageFragmen
23、t-onCreate); Bundle args = getArguments(); pagInfo = args != null ? args.getString(fgArg) : page; Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) Log.d(TAG, TabPageFragment-onCreateView); View view = inflater.inflate(R.layout.fragment_demo, c
24、ontainer, false); TextView viewTvPage = (TextView) view.findViewById(R.id.tv_page); viewTvPage.setText(pagInfo); return view; Override public void onDestroy() super.onDestroy(); Log.d(TAG, TabPageFragment-onDestroy); fragment_demo.xmlhtml view plaincopy<?xml version=1.0 encoding=utf-8?> <Li
25、nearLayout xmlns:android= android:layout_width=match_parent android:layout_height=match_parent android:orientation=vertical android:background=#708090 > <TextView android:id=+id/tv_page android:layout_width=wrap_content android:layout_height=wrap_content android:text=TextView /> </LinearLayout> MAIL:xcl_168我的CSDN BLOG:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2