当前位置: 代码迷 >> Android >> android使用implements ActionBar.TabListener的模式创建导航
  详细解决方案

android使用implements ActionBar.TabListener的模式创建导航

热度:176   发布时间:2016-04-28 02:30:40.0
android使用implements ActionBar.TabListener的方式创建导航

上篇说到,android现在的版本已经不再推荐使用继承TabActivity(或ActivityGroup)的方式创建Tabhost导航,所以现在尝试使用Fragment片段建立每一个导航标签。具体做法如下:

?

step1,建立一个总的Activity,获取actionBar并创建Tab选项卡

public class StationActivity extends FragmentActivity implements 	ActionBar.TabListener {		private ActionBar actionBar;	private String[] tabs = {"最近常用", "热点车站", "车站列表"};		@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.station_select);		actionBar = getActionBar();		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);		actionBar.setDisplayShowTitleEnabled(true);		                //在actionbar中添加EditText 控件		actionBar.setCustomView(R.layout.search);		EditText search = (EditText) actionBar.getCustomView().findViewById(R.id.input);						//创建Tab选项卡		for(int i=0; i<tabs.length; i++) {			Tab tab = actionBar.newTab().setText(tabs[i]).setTabListener(this);			actionBar.addTab(tab);		}				 actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM		            | ActionBar.DISPLAY_SHOW_HOME);	}		}

?

step2,重写tab选项卡选中、不选中、再次选中的方法。每选中一个选项卡就启动相应的Fragment片段,对比上一篇创建tabhost的方式,每一个选项卡都是由一个intent来启动的;而本方式则是由如下方式启动。

@Override	public void onTabSelected(Tab tab, FragmentTransaction ft) {		switch(tab.getPosition()) {//为避免fragment之间切换出现重叠问题,这里把add方法改成replace方法		case 0:			RecentStation recent = new RecentStation();			ft.replace(android.R.id.content, recent);			break;		case 1:			HotStation hot = new HotStation();			ft.replace(android.R.id.content, hot);			break;		case 2:			ListStation list = new ListStation();			ft.replace(android.R.id.content, list);			break;		}	}	@Override	public void onTabUnselected(Tab tab, FragmentTransaction ft) {	}	@Override	public void onTabReselected(Tab tab, FragmentTransaction ft) {	}

?

?

注:RecentStation ,HotStation ,ListStation 都是fragment片段

?

step3,建立每个选项卡对应的fragment(这里以RecentStation 为例)

public class RecentStation extends Fragment {		TextView tv1, tv2;		@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,			Bundle savedInstanceState) {		View view = inflater.inflate(R.layout.station_recent, container, false);		tv1 = (TextView) view.findViewById(R.id.tip1);		tv2 = (TextView) view.findViewById(R.id.tip2);		return view;	}		@Override	public void onActivityCreated(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);//更多代码。。。。。	}	}

?

?

这里需要注意的地方:

?

1、使用此种fragment的方式创建Tabhost选项卡,可以重写的方法有onCreateView,onActivityCreated,onCreate。方法的执行顺序为:onCreate-->onCreateView-->onActivityCreated

?

2、如果想要在fragment对应的布局文件中使用ListView,最好继承自Fragment而不是ListFragment,因为如果继承后者,当listView填充完毕仍然会有一个圆形进度条显示,美观度大打折扣

?

3、一般而言,在onCreateView方法中加载布局文件,找到对应的组件;在onActivityCreated方法中填充数据等。

?

相应的布局文件省略……

至此,采用actionbar的方式创建tabhost导航就完成了。

  相关解决方案