태그:             

바로 아래 글에 이어 ActionBarSherlock를 이용한 탭 내비게이션 프로그램을 만들어보자.

탭을 3개로 했을 때 필요한 소스 파일은 총 5개.

  • 메인 액티비티
  • 탭 리스너
  • 댑1 처리 소스
  • 탭2 처리 소스
  • 탭3 처리 소스
  • 기타 리소스 파일

우선 메인 액티비티에 필요한 소스 파일

[code java]
package com.spacesoft.myactionbartab;

import android.os.Bundle;
import android.widget.Toast;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;

public class MainActivity extends SherlockFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme_Sherlock); //Used for theme switching in samples
super.onCreate(savedInstanceState);

ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(“ActionBar TAB”);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.addTab(actionBar
.newTab()
.setText(“처음탭”)
.setTabListener(new TabListener<MyTab1>(this, “tab1”,
MyTab1.class)));
actionBar.addTab(actionBar
.newTab()
.setText(“탭2”)
.setTabListener(new TabListener<MyTab2>(this, “tab2”,
MyTab2.class)));
actionBar.addTab(actionBar
.newTab()
.setText(“3번탭”)
.setTabListener(new TabListener<MyTab3>(this, “tab3”,
MyTab3.class)));

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

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(“selectedTab”, getSupportActionBar()
.getSelectedNavigationIndex());
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Used to put dark icons on light action bar

menu.add(“search”)
.setIcon(R.drawable.icon_search)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

menu.add(“Settings”)
.setIcon(R.drawable.icon_settings)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
Toast.makeText(this, “Selected Item : ” + item.getTitle(),
Toast.LENGTH_SHORT).show();
return true;
}
}
[/code]

탭 리스너

[code java]
package com.spacesoft.myactionbartab;

import android.support.v4.app.FragmentTransaction;

import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.app.SherlockFragmentActivity;

public class TabListener<T extends SherlockFragment>
implements com.actionbarsherlock.app.ActionBar.TabListener {
private final SherlockFragmentActivity mActivity;
private final String mTag;
private final Class<T> mClass;

private SherlockFragment mFragment;

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

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

public void onTabUnselected(Tab tab, FragmentTransaction ft) {
SherlockFragment preInitializedFragment = (SherlockFragment)
mActivity.getSupportFragmentManager().findFragmentByTag(mTag);

if (preInitializedFragment != null) {
ft.detach(preInitializedFragment);
} else if (mFragment != null) {
ft.detach(mFragment);
}
}

public void onTabReselected(Tab tab, FragmentTransaction ft) {
// User selected the already selected tab. Usually do nothing.
}
}
[/code]

탭1 처리 소스

[code java]
package com.spacesoft.myactionbartab;

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

import com.actionbarsherlock.app.SherlockFragment;

public class MyTab1 extends SherlockFragment {
@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(“1번 탭이다.”);
return v;
}
}
[/code]

탭2 처리 소스

[code java]
package com.spacesoft.myactionbartab;

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

import com.actionbarsherlock.app.SherlockFragment;

public class MyTab2 extends SherlockFragment {
@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(“여기는 두 번째 탭”);
return v;
}
}
[/code]

탭3 처리 소스

[code java]
package com.spacesoft.myactionbartab;

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

import com.actionbarsherlock.app.SherlockFragment;

public class MyTab3 extends SherlockFragment {
@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(“tab3에 왔다.”);
return v;
}
}
[/code]

각 파일을 위와 같이 준비하고 필요한 리소스 파일(각 탭에 텍스트를 출력하기 위한 레이아웃 파일 – simple.xml – 과 아이콘 부분에 들어갈 아이콘으로 icon_search.png와 icon_settings.png가 필요하다)을 적당한 폴더에 넣고 실행하면 아래 화면과 같이 탭으로 구분된 실행화면이 나타난다.

사용자 삽입 이미지
ActionBarSherlock를 이용해 만든 탭 내비게이션 예제 화면

관련글

안드로이드 3.0 미만에서도 ActionBar를 써보자... 안드로이드 3.0부터는 ActionBar가 들어갔고, SDK에도 안드로이드 3.0에 해당하는 API 레벨 11부터 ActionBar를 처리할 수 있는 API가 들어가있다. 요즘 앱의 추세가 Acti...
Intel HAXM 설치 후 동작하는지 확인하기... 안드로이드나 타이젠 에뮬레이터를 띄우려면 상당한 리소스와 시간이 소요된다. 이걸 더 원할하게 할 수 있도록 도와주는 역할을 하는게 Intel HAXM인데 설치를 해도 백그라운드에서 조용히 돌아가는 ...
안드로이드 – 카운트 다운 타이머(CountDownTimer)... Handler를 이용하지 않고도 일정 시간이 지난 뒤에 뭔가를 하고 싶은 경우에 사용할 수 있는 CountDownTimer 클래스가 있다. 카운트 다운 타이머는 총 시간과 인터벌을 주고 시작하면 ...
안드로이드 다국어 지원 앱 작성시…... 안드로이드로 다국어를 지원하는 앱을 만드는 방법은 아주 간단하다. 프로그램 코드는 언어에 따라 변경할 것이 거의 없고, 문자열과 화면에 출력할 아이콘이나 그림 파일만 해당 언어에 맞게 작성해서 별도...
안드로이드 물리버튼 없는 경우에 메뉴 버튼 만들기... 안드로이드폰을 보면 요즘 물리/하드웨어버튼을 탑재하지 않고 출시되는 상황이다 그래서 화면의 일부를 뒤로가기/홈/멀티태스킹 또는 메뉴 버튼으로 사용한다. 메뉴 버튼이 있는 경우에는 하드웨어 버튼의 메...
안드로이드 AVD 만들 때 에러가 발생하면…... Starting emulator for AVD 'JellyBean_4_2_Phone' Failed to allocate memory: 8 This application has requeste...
ActionBarSherlock를 이용한 탭 내비게이션

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다