现在的位置: 首页 > 综合 > 正文

ActionBarSherlock的NAVIGATION_MODE_LIST模式

2018年06月05日 ⁄ 综合 ⁄ 共 2766字 ⁄ 字号 评论关闭

与ActionBar一样ActionBarSherlock也提供了NAVIGATION_MODE_LIST模式,即在操作栏上实现下拉的形式,方便用户进行选择,关键步骤是要实现一个OnNavigationListener接口,以便选择下拉选项时切换不同的视图。

MainActivity.java代码:

public class MainActivity extends SherlockFragmentActivity {

	/*定义一个ActionBar*/
	private ActionBar actionBar;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		/*设置一个adapter*/
		SpinnerAdapter adapter = ArrayAdapter.createFromResource(this, R.array.student, android.R.layout.simple_list_item_1);
		
		/*得到ActionBar*/
		actionBar = this.getSupportActionBar();
		/*将actionBar的操作模型设置为NAVIGATION_MODE_LIST*/
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
		
		/*设置下拉的回调事件*/
		actionBar.setListNavigationCallbacks(adapter, new MyNavigationListener());
		
	}

	/**
	 * 创建onNavigationListener内部监听器,以实现选择下拉列表中选项切换视图的效果
	 */
	class MyNavigationListener implements OnNavigationListener{

		/*从arrays.xml文件中获取字符数组*/
		String[] listNames = getResources().getStringArray(R.array.student);
		
		/*选择下拉菜单项的时候,将Activity的内容置换为对应的Fragment*/
		public boolean onNavigationItemSelected(int itemPosition, long itemId) {
			
			/*生成自定Fragment*/
			StudentInfo student = new StudentInfo();
			FragmentManager manager = getSupportFragmentManager();
			
			FragmentTransaction transaction = manager.beginTransaction();
			
			/*将Activity中的内容替换成为对应的Fragment*/
			transaction.replace(android.R.id.content, student, listNames[itemPosition]);
			
			transaction.commit();
			
			return true;
		}
		
	}
	
	public boolean onCreateOptionsMenu(Menu menu) {

		getSupportMenuInflater().inflate(R.menu.main, menu);
		
		return true;
	}

}

StudentInfo.java代码:

public class StudentInfo extends Fragment {

	/* Fragment对应的标签,当Fragment依附于Activity时得到 */
	private String tag;

	@Override
	public void onAttach(Activity activity) {

		super.onAttach(activity);

		tag = this.getTag();
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

		TextView textView = new TextView(getActivity());

		textView.setText(tag);

		return textView;
	}
	
	@Override
	public void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
	}
}

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

values/arrays.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    
    <string-array name="student">
        <item >廖*民</item>
        <item >刘*星</item>
        <item >钟*建</item>
        <item >罗*明</item>
    </string-array>
</resources>

demo效果展示:

下载demo:http://download.csdn.net/detail/lzm1340458776/7320729

抱歉!评论已关闭.