`
貌似掉线
  • 浏览: 256576 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android使用actionbar与fragment

 
阅读更多
android使用actionbar中的tab,及fragment代码示例:
/*
 * @(#)MainActivity.java		       Project:bookmanager
 * Date:2013-1-9
 *
 * Copyright (c) 2013 CFuture09, Institute of Software, 
 * Guangdong Ocean University, Zhanjiang, GuangDong, China.
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.lurencun.app.bookmanager.ui;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import com.lurencun.app.bookmanager.R;
import com.lurencun.cfuture09.androidkit.util.ui.ExitDoubleClick;

/**
 * @author Geek_Soledad (66704238@51uc.com)
 */
public class MainActivity extends Activity {
	private static final int MENU_CHANGE_USER = 1;
	private BorrowFragment mBorrowFragment;
	private SearchFragment mSearchFragment;
	private UploadFragment mUploadFragment;
	private ExecutorService mExecutor;
	private ActionBar mBar;
	private ActionBar.Tab mTabBorrow;
	private ActionBar.Tab mTabUpload;
	private ActionBar.Tab mTabSearch;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mExecutor = Executors.newFixedThreadPool(3);
		mBorrowFragment = new BorrowFragment(mExecutor);
		mSearchFragment = new SearchFragment(mExecutor);
		mUploadFragment = new UploadFragment(mExecutor);
		mBar = getActionBar();
		mBar.setHomeButtonEnabled(true);
		mBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
		mTabBorrow = mBar.newTab().setText(R.string.borrow);
		mTabSearch = mBar.newTab().setText(R.string.search);
		mTabUpload = mBar.newTab().setText(R.string.upload);
		List<Fragment> fragments = new ArrayList<Fragment>();
		fragments.add(mBorrowFragment);
		fragments.add(mSearchFragment);
		fragments.add(mUploadFragment);
		MyTabListener tabListener = new MyTabListener(fragments);
		mTabBorrow.setTabListener(tabListener);
		mTabSearch.setTabListener(tabListener);
		mTabUpload.setTabListener(tabListener);
		// mTabBorrow.setTabListener(new MyTabListener(mBorrowFragment));
		// mTabSearch.setTabListener(new MyTabListener(mSearchFragment));
		// mTabUpload.setTabListener(new MyTabListener(mUploadFragment));
		mBar.addTab(mTabBorrow);
		mBar.addTab(mTabSearch);
		mBar.addTab(mTabUpload);
	}

	/**
	 * 当Fragment中的控件被点击时的回调事件。
	 * 
	 * @param v
	 */
	public void onButtonClick(View v) {
		if (mBar.getSelectedTab().equals(mTabBorrow)) {
			mBorrowFragment.onButtonClick(v);
		}
		if (mBar.getSelectedTab().equals(mTabUpload)) {
			mUploadFragment.onButtonClick(v);
		}
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case android.R.id.home:
			changeUser();
			break;
		default:
			break;
		}
		return true;
	}

	/**
	 * 更换用户。
	 */
	private void changeUser() {
		startActivity(new Intent(this, LoginActivity.class));
		finish();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			ExitDoubleClick.getInstance(this).doDoubleClick(2000, null);
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		mExecutor.shutdown();
	}

	/**
	 * 自定义的TabListener,实现tab布局。
	 * 
	 * @author msdx
	 * 
	 */
	protected class MyTabListener implements ActionBar.TabListener {
		// private Fragment mFragment;
		private List<Fragment> mFragments;

		public MyTabListener(List<Fragment> fragments) {
			mFragments = fragments;
			FragmentTransaction ft = getFragmentManager().beginTransaction();
			for (Fragment fragment : fragments) {
				ft.add(R.id.fragment_place, fragment, null);
			}
			ft.commit();
		}

		@Override
		public void onTabReselected(Tab tab, FragmentTransaction ft) {
		}

		@Override
		public void onTabSelected(Tab tab, FragmentTransaction ft) {
			ft.show(mFragments.get(tab.getPosition()));
			// ft.add(R.id.fragment_place, mFragment, null);
		}

		@Override
		public void onTabUnselected(Tab tab, FragmentTransaction ft) {
			// ft.remove(mFragment);
			ft.hide(mFragments.get(tab.getPosition()));
		}

	}
}

其中BorrowFragment, SearchFragment及UploadFragment均继承自Fragment,并重写其onCreateView方法。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics