动态ActionBar

[b]首先介绍一下该应用的主要操作界面[/b]
1. ProvinceLayout.java: 主操作界面
2. ProvinceListFragment.java: 列表界面

界面元素的操作:
在“主操作界面”中,包含一个动态加载的ActionBar,以Spinner形式显示。 点击Spinner中的任何一个元素,在“列表界面”中动态显示该元素的子元素列表。

[b]xml文件配置[/b]
layout/province_onepane.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">


<!-- ProvinceListFragment的配置-->
<fragment android:id="@+id/headlines"
android:layout_height="fill_parent"
android:name="cn.com.demo.android.activity.ProvinceListFragment"
android:layout_width="match_parent" />
</LinearLayout>



[b]java源码中对ActionBar的操作[/b]
1. 创建一个ActionBar的listener
CompatActionBarNavListener.java,接口文件,设置点击ActionBar中的某项时应该自定义的操作。

package cn.com.demo.example;

public interface CompatActionBarNavListener {

public void onCategorySelected(int catIndex);

}


2. 创建一个ActionBar监听的起始类

package cn.com.demo.example;

import android.app.ActionBar.OnNavigationListener;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;

public class CompatActionBarNavHandler implements TabListener, OnNavigationListener {
// The listener that we notify of navigation events
CompatActionBarNavListener mNavListener;

/**
* Constructs an instance with the given listener.
*
* @param listener the listener to notify when a navigation event occurs.
*/
public CompatActionBarNavHandler(CompatActionBarNavListener listener) {
mNavListener = listener;
}

/**
* Called by framework when a tab is selected.
*
* This will cause a navigation event to be delivered to the configured listener.
*/
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
mNavListener.onCategorySelected(tab.getPosition());
}

/**
* Called by framework when a item on the navigation menu is selected.
*
* This will cause a navigation event to be delivered to the configured listener.
*/
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
mNavListener.onCategorySelected(itemPosition);
return true;
}


/**
* Called by framework when a tab is re-selected. That is, it was already selected and is
* tapped on again. This is not used in our app.
*/
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// we don't care
}

/**
* Called by framework when a tab is unselected. Not used in our app.
*/
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// we don't care
}

}


3. 在ProvinceLayout.java中设置ActionBar,并调用监听的方法

public class ProvinceLayout extends Activity
implements CompatActionBarNavListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.province_layout);

。。。。。。

// 设置动态的ActionBar
setUpActionBar(mIsDualPane);

}

void setUpActionBar(boolean showTabs) {
if (Build.VERSION.SDK_INT < 11) {
return;
}

categories = s.getListCursorByLevel(getContentResolver(), 0);

android.app.ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);

CompatActionBarNavHandler handler = new CompatActionBarNavHandler(this);

actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
SpinnerAdapter adapter = new SimpleCursorAdapter(
this, android.R.layout.simple_spinner_item,
categories,
new String[] {AreaSQLiteHelper.COLUMN_NAMES},
new int[] {android.R.id.text1}
);
actionBar.setListNavigationCallbacks(adapter, handler);
actionBar.setDisplayUseLogoEnabled(true);
}

......
// 实现监听中的方法
@Override
public void onCategorySelected(int catIndex) {
setCategory(catIndex, 0);
}

void setCategory(int index, long id) {
// 找到ProvinceListFragment, 调用该list的方法刷新列表
mHeadlinesFragment = (ProvinceListFragment) getFragmentManager().findFragmentById(R.id.headlines);
mHeadlinesFragment.list(index);


}

}


附件中的例子是一个很详细的介绍如何使用ActionBar的实例,可以Tab形式显示,也可以List形式显示。 根据这个例子,我把静态显示部分改成了动态显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值