当前位置:首页 > AndroidUI设计与开发 顶部标题栏ActionBar奥义详解 - 图文
public void onTabSelected(Tab tab, FragmentTransaction ft) { // Check if the fragment is already initialized if (mFragment == null) {
// If not, instantiate and add it to the activity mFragment = Fragment.instantiate(mActivity, mClass.getName());
ft.add(android.R.id.content, mFragment, mTag); } else {
// If it exists, simply attach it in order to show it ft.attach(mFragment); } }
public void onTabUnselected(Tab tab, FragmentTransaction ft) { if (mFragment != null) { // Detach the fragment, because another one is being attached ft.detach(mFragment); } }
public void onTabReselected(Tab tab, FragmentTransaction ft) { // User selected the already selected tab. Usually do nothing. } }
这段代码并不长,我们简单分析一下。当Tab被选中的时候会调用onTabSelected()方法,在这里我们先判断mFragment是否为空,如果为空的话就创建Fragment的实例并调用FragmentTransaction的add()方法,如果不会空的话就调用FragmentTransaction的attach()方法。 而当Tab没有被选中的时候,则调用FragmentTransaction的detach()方法,将UI资源释放掉。 当Tab被重新选中的时候会调用onTabReselected()方法,如果没有特殊需求的话,通常是不需要进行处理的。 接下来第二步要给每一个Tab创建一个ActionBar.Tab的实例,在此之前要先准备好每个Tab页对应的Fragment。比如说这里我们想创建三个Tab页,准备好这三个Tab页对应的Fragment和对应的布局文件。
package com.yanis.yc_ui_actionbar_tab;
import android.os.Bundle;
import android.view.LayoutInflater; import android.view.View;
import android.view.ViewGroup;
public class Fragment1 extends android.app.Fragment { @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment1, container, false); } }
没有什么实质性的代码,只是显示了指定的布局文件。 Fragment都准备好了之后,接下来就可以开始创建Tab实例了,创建好了之后则再调用addTab()方法添加到ActionBar当中,这两步通常都是在Activity的onCreate()方法中执行的,代码如下:
package com.yanis.actionbar;
import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.Activity; import android.content.Intent; import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.support.v4.app.TaskStackBuilder; import android.view.MenuItem;
public class TabActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab);
initView(); }
private void initView() {
// 提示getActionBar方法一定在setContentView后面 ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// 添加Tab选项 Tab tab = actionBar
.newTab()
.setText(\澳门风云2\ .setTabListener(
new TabListener
tab = actionBar .newTab()
.setText(\五十度灰\ .setTabListener(
new TabListener
.setText(\爸爸去哪儿2\ .setTabListener(
new TabListener
@Override
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this); if (NavUtils.shouldUpRecreateTask(this, upIntent)) { TaskStackBuilder.create(this)
.addNextIntentWithParentStack(upIntent) .startActivities(); } else {
upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); NavUtils.navigateUpTo(this, upIntent); }
return true; default:
return super.onOptionsItemSelected(item); } } }
可以看到,这里是使用连缀的写法来创建Tab的。首先调用ActionBar的newTab()方法来创建一个Tab实例,接着调用了setText()方法来设置标题,然后再调用setTabListener()方法来设置事件监听器,最后再调用ActionBar的addTab()方法将Tab添加到ActionBar中。 好了,这样的话代码就编写完了,效果如下图所示: 11.添加下拉列表导航 1.1 简单介绍 作为Activity内部的另一种导航(或过滤)模式,操作栏提供了内置的下拉列表。下拉列表能够提供Activity中内容 的不同排序模式。 启用下拉式导航的基本过程如下: <1> 创建一个给下拉提供可选项目的列表,以及描画列表项目时所使用的布局; <2> 实现ActionBar.OnNavigationListener回调,在这个回调中定义当用户选择列表中一个项目时所发生的行为; <3> 用setNavigationMode()方法该操作栏启用导航模式; <4> 用setListNavigationCallbacks()方法给下拉列表设置回调方法。 1.2 效果图如下:
共分享92篇相关文档