'ActionBar'에 해당되는 글 1건

Android에서 Action Bar를 이용하여 아래와 같은 탭 액티비티를 만들수 있다.

물론 이전에도 Tab Host등을 이용하고 여러개의 액티비티들을 이용해서 탭을 만들수 있었지만, 지금 처럼 아주 간결하게 만들기가 쉽지는 않았다.


액티비티 하나에 Fragment들을 탭의 개수 만큼 구현하고, 그리고 가장 중요한 ActionBar 모드를 ActionBar.NAVIGATION_MODE_TABS로 설정해주면 간단하게 탭을 구현할수 있다.





너무 간단하니까.. 바로 소스를 보고 따로 구현하도록 하면 될듯하다.

 1. 탭들을 등록하고 관리하는 Activity 하나.

 2. 탭들을 표현할 Fragment 들이 탭의 개수만큼(위에서는 3개)

 3. TabListener 하나.




FragmentTabs Activity.

package com.hopeisagoodthing.actionbar.tab;

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;

public class FragmentTabs extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		final ActionBar actionBar = getActionBar();
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

		actionBar.addTab(actionBar
				.newTab()
				.setText("Tab1")
				.setTabListener(
						new TabListener<FragmentTab1>(this, "tab1",
								FragmentTab1.class)));
		actionBar.addTab(actionBar
				.newTab()
				.setText("Tab2")
				.setTabListener(
						new TabListener<FragmentTab2>(this, "tab3",
								FragmentTab2.class)));
		actionBar.addTab(actionBar
				.newTab()
				.setText("Tab3")
				.setTabListener(
						new TabListener<FragmentTab3>(this, "tab3",
								FragmentTab3.class)));

		if (savedInstanceState != null) {
			actionBar.setSelectedNavigationItem(savedInstanceState.getInt(
					"selectedTab", 0));
		}
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		outState.putInt("selectedTab", getActionBar()
				.getSelectedNavigationIndex());
	}
}



FragmentTab1

package com.hopeisagoodthing.actionbar.tab;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class FragmentTab1 extends Fragment {
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View v = inflater.inflate(R.layout.simple, container, false);
		View tv = v.findViewById(R.id.text);
		((TextView) tv).setText("coolkim.tistory.com");
		return v;
	}
}



FragmentTab2

package com.hopeisagoodthing.actionbar.tab;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class FragmentTab2 extends Fragment {
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View v = inflater.inflate(R.layout.simple, container, false);
		View tv = v.findViewById(R.id.text);
		((TextView) tv).setText("Hope is a good thing.");
		return v;
	}
}



FragmentTab3

package com.hopeisagoodthing.actionbar.tab;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class FragmentTab3 extends Fragment {
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View v = inflater.inflate(R.layout.simple, container, false);
		View tv = v.findViewById(R.id.text);
		((TextView) tv).setText("Simple Tab");
		return v;
	}
}



TabListener

package com.hopeisagoodthing.actionbar.tab;

import android.app.ActionBar;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.app.ActionBar.Tab;
import android.widget.Toast;

public class TabListener<T extends Fragment> implements ActionBar.TabListener {

	private final Activity mActivity;
	private final String mTag;
	private final Class<T> mClass;
	private Fragment mFragment;

	public TabListener(Activity activity, String tag, Class<T> clz) {
		mActivity = activity;
		mTag = tag;
		mClass = clz;

		mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
		if (mFragment != null && !mFragment.isDetached()) {
			FragmentTransaction fragmentTransaction = mActivity
					.getFragmentManager().beginTransaction();
			fragmentTransaction.detach(mFragment);
			fragmentTransaction.commit();
		}
	}

	public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) {
		if (mFragment == null) {
			mFragment = Fragment.instantiate(mActivity, mClass.getName(), null);
			fragmentTransaction.add(android.R.id.content, mFragment, mTag);
		} else {
			fragmentTransaction.attach(mFragment);
		}
	}

	public void onTabUnselected(Tab tab, FragmentTransaction fragmentTransaction) {
		if (mFragment != null) {
			fragmentTransaction.detach(mFragment);
		}
	}

	public void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) {
		Toast.makeText(mActivity, "onTabReselected!", Toast.LENGTH_SHORT)
				.show();
	}
}

'코딩하고 > Android' 카테고리의 다른 글

HttpClient 사용하기  (0) 2012.10.25
File Observer 사용하기  (0) 2012.10.21
App에서 SystemProperties 가지고 오는 방법  (1) 2012.10.18
검색 API 사용하기 - twitter api  (0) 2012.10.05
검색 API 사용하기 - google api  (0) 2012.10.05
블로그 이미지

커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

,