ActionBar详解(五)--->利用ActionBar结合Fragment实现Tab导航

MainActivity如下:

package cc.testsimpleactionbar4;

import android.os.Bundle;
import android.app.ActionBar;
import android.app.Activity;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;
/**
 * Demo描述:
 * 利用ActionBar结合Fragment实现Tab导航.
 * 当选中不同的Tab时利用Fragment显示不同的内容
 *
 * 参考资料:
 * 1 Android疯狂讲义(第二版)
 *   Thank you very much
 *
 */
public class MainActivity extends Activity {
     private ActionBar mActionBar;
     private final static String SELECTED_TAB_INDEX="selected_tab";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initActionBar();
	}

	private void initActionBar(){
		mActionBar=getActionBar();
		//设置导航方式为Tab
		mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

		Tab tab1=mActionBar.newTab();
		tab1.setText("第一页");
		tab1.setTabListener(new TabListenerImpl());
		mActionBar.addTab(tab1);

		Tab tab2=mActionBar.newTab();
		tab2.setText("第二页");
		tab2.setTabListener(new TabListenerImpl());
		mActionBar.addTab(tab2);

		Tab tab3=mActionBar.newTab();
		tab3.setText("第三页");
		tab3.setTabListener(new TabListenerImpl());
		mActionBar.addTab(tab3);
	}

	private class TabListenerImpl implements TabListener{
		@Override
		public void onTabReselected(Tab arg0, FragmentTransaction arg1) {

		}

		@Override
		public void onTabSelected(Tab tab, FragmentTransaction transaction) {
			System.out.println(" onTabSelected ");
			TestFragment testFragment=new TestFragment();
			Bundle bundle=new Bundle();
			bundle.putString(TestFragment.KEY, "这是第"+(tab.getPosition()+1)+"个Tab");
			testFragment.setArguments(bundle);
			FragmentTransaction fragmentTransaction=getFragmentManager().beginTransaction();
			fragmentTransaction.replace(R.id.relativeLayoutContainer, testFragment);
			fragmentTransaction.commit();
		}

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

		}

	}

	//以下处理横竖屏的切换

	//将当前选中的Tab页的索引保存到Bundle中
	@Override
	protected void onSaveInstanceState(Bundle bundle) {
		super.onSaveInstanceState(bundle);
		bundle.putInt(SELECTED_TAB_INDEX, mActionBar.getSelectedNavigationIndex());
	}

	//获取已经保存的被选中Tab页的索引,且设置ActionBar.
	//setSelectedNavigationItem()方法会调用onTabSelected()
	@Override
	protected void onRestoreInstanceState(Bundle bundle) {
		super.onRestoreInstanceState(bundle);
		mActionBar.setSelectedNavigationItem(bundle.getInt(SELECTED_TAB_INDEX));
	}

}

 

TestFragment如下:

package cc.testsimpleactionbar4;

import android.app.Fragment;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class TestFragment extends Fragment {
	public static final String KEY="key";
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
		TextView textView=new TextView(getActivity());
		textView.setGravity(Gravity.CENTER);
		Bundle bundle=this.getArguments();
		String content=bundle.getString(KEY);
		textView.setText(content);
		textView.setTextSize(30);
		return textView;
	}
}

main.xml如下:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/relativeLayoutContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

</RelativeLayout>

 

时间: 2024-08-01 19:43:05

ActionBar详解(五)---&gt;利用ActionBar结合Fragment实现Tab导航的相关文章

ActionBar详解(六)---&amp;gt;利用ActionBar结合Fragment实现下拉式导航

MainActivity如下: package cc.testsimpleactionbar5; import android.os.Bundle; import android.widget.ArrayAdapter; import android.app.ActionBar; import android.app.ActionBar.OnNavigationListener; import android.app.Activity; import android.app.FragmentTr

ActionBar详解(二)---&amp;gt;使用ActionBar显示选项菜单

MainActivity如下: package cc.testsimpleactionbar1; import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; import android.widget.Toast

Masonry自动布局详解五:比例(multipliedBy)

Masonry自动布局详解五:比例(multipliedBy) 说到iOS自动布局,有很多的解决办法.有的人使用xib/storyboard自动布局,也有人使用frame来适配.对于前者,笔者并不喜欢,也不支持.对于后者,更是麻烦,到处计算高度.宽度等,千万大量代码的冗余,对维护和开发的效率都很低. 笔者在这里介绍纯代码自动布局的第三方库:Masonry.这个库使用率相当高,在全世界都有大量的开发者在使用,其star数量也是相当高的. 支持原创,请阅读原文 效果图 本节详解Masonry的以动画

Android开发之对话框案例详解(五种对话框)

下面通过实例代码给大家分享5种android对话框,具体内容详情如下所示: 1 弹出普通对话框 --- 系统更新 2 自定义对话框-- 用户登录 3 时间选择对话框 -- 时间对话框 4 进度条对话框 -- 信息加载.. 5 popuWindow对话框 1 弹出普通对话框 --- 系统更新 //弹出普通对话框 public void showNormalDialog(View v) { AlertDialog.Builder builder = new Builder(this); //设置Di

Flash MX 新特性详解(五)应用开发和发布与重放

详解 一.应用开发 1.预制了用户界面的组件 预制一系列可定制的界面组件,包括:滚动条.多种文本域.输入按钮.和检查框,还有列表和组合箱,可以加速应用软件的开发.这些组件保证了普通用户用Flash MX来创建丰富的动画效果. 2.定制组件 定制一个更强的可以反复使用的组件来满足你变化的设计方案的需要.你可以将组件在不同的Falsh作品中使用或者在开发小组里相互组织.开发者可以拖动预制的组件到界面上.组建的方法可以在已经定义的APIs里整合和操作. 3.定制组件在界面上的设计时间 通过定制属性建材

hadoop详解(五) Archives

简介 我们在hadoop深入研究:(一)--hdfs介绍里已讲过,hdfs并不擅长存储小文件,因为每个文件最 少一个block,每个block的元数据都会在namenode节点占用内存,如果存在这样大量的小文件,它们会吃掉 namenode节点的大量内存. hadoop Archives可以有效的处理以上问题,他可以把多个文件归档成为一个文 件,归档成一个文件后还可以透明的访问每一个文件,并且可以做为mapreduce任务的输入. 用法 hadoop Archives可以使用archive工具创

Fragment详解(一)---&amp;gt;核心基础以及Fragment与Activity传递数据完整示例

MainActivity如下: package cc.testsimplefragment0; import android.os.Bundle; import android.app.Activity; import android.app.FragmentTransaction; import cc.testsimplefragment0.TitlesListFragment.TitlesListFragmentCallBack; /** * Demo描述: * Fragment基本使用以及

actionbar详解(二)

经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对较为深刻的理解了.唯一欠缺的是,前面我们都只是学习了理论知识而已,虽然知识点已经掌握了,但是真正投入到项目实战当中时会不会掉链子还很难说.那么不用担心,本篇文章我就将带领大家一起进入ActionBar的应用实战,将理论和实践完美结合到一起. 如果你还没有看过我的前两篇文章,建议先去阅读一下 Android ActionBar完全解析,使用官方推荐的最佳导航栏(上) 和 Android ActionBar完全解析,使用官方推荐的最

ActionBar详解(三)---&amp;gt;ActionBar的Home导航功能

FirstActivity如下: package cc.testsimpleactionbar2; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; /** * Demo描述: *