http://itknowhow.tistory.com/17
1. CurrentTab이 변경이 되면 Intent가 Refresh 되도록 설정하는 방법
- Intent에 아래와 같이 addFlags를 설정하면 TabChange때 새로 Activity를 생성한다.
- TabHost.TabSpec spec = tabHost.newTabSpec("tab1").setIndicator(tabs[0]).setContent(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
2. TabBar 꾸미는 방법
- Tab Source (버튼 디자인)
public class TabView extends LinearLayout
{
ImageView image;
TextView text;
public TabView(Context context, int drawable, int label)
{
super(context);
// Tab Image Setting
image = new ImageView(context);
image.setImageResource(drawable);
// Tab Label Setting
text = new TextView(context);
text.setText(getResources().getString(label));
text.setGravity(0x01); /* Center */
setOrientation(LinearLayout.VERTICAL);
addView(image);
addView(text);
this.setBackgroundResource(R.drawable.tab_selecter);
}
public ImageView getImageView()
{
return image;
}
public TextView getTextView()
{
return text;
}
}
- TabBar에 Tab 넣기
tabHost.newTabSpec("tab1").setIndicator(new TabView(this, R.drawable.tab1, R.string.tab1)).setContent(intent);
커스텀한 뷰 객체에 이미지와 텍스트를 설정하고 tabHost에 넣는다.
- 현재 Tab의 위치가 변경되었을 때 호출되는 이벤트 함수
tabHost.setOnTabChangedListener(new OnTabChangeListener(){ ... }
- 현재 Tab의 안에서 여러개의 Activity를 Navigation 처리하기
public class NavigationActivity extends Activity
{
// 앞으로 가기 처리
public void goNextHistory(String id, Intent intent)
{
NavigationGroupActivity parent = ((NavigationGroupActivity) getParent());
View view = parent.group.getLocalActivityManager()
.startActivity(id, intent).getDecorView();
parent.group.replaceView(view);
}
// 뒤로 가기 처리
@Override
public void onBackPressed()
{
NavigationGroupActivity parent = ((NavigationGroupActivity) getParent());
parent.back();
}
}
public class NavigationGroupActivity extends ActivityGroup
{
ArrayList<View> history; // View들을 관리하기 위한 List
public NavigationGroupActivity group; // Activity들이 접근하기 위한 Group
public int tabIndex;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
history = new ArrayList<View>();
group = this;
}
// 동일한 Level의 Activity를 다른 Activity로 변경하는 경우
public void changeView(View v)
{
history.remove(history.size() - 1);
history.add(v);
setContentView(v);
}
// 새로운 Level의 Activity를 추가하는 경우
public void replaceView(View v)
{
history.add(v);
setContentView(v);
}
public void tabBack()
{
if (history.size() > 1)
{
back();
}
}
// Back Key가 눌려졌을 경우에 대한 처리
public void back()
{
if (history.size() > 1)
{
history.remove(history.size()-1);
setContentView(history.get(history.size()-1));
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
ContentsControll.tabRotation = 0;
}
else
{
finish(); // 최상위 Level의 경우 TabActvity를 종료해야 한다.
}
}
// Back Key에 대한 Event Handler
@Override
public void onBackPressed()
{
group.back();
return;
}
}
http://vissel.tistory.com/91
기본 소스를 보면 2개의 탭이 있는데요 화면 으로 누르지 않고 화면 안에서 소스로 이동할수 있거나 아니면
항목을 터치 이벤트에서 탭누르지않고 이동하려면..
final TabHost tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("메인")
.setContent(new Intent(this, 아아.class)));
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("환경설정")
.setContent(
new Intent(this, 아아.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));
tabHost.setCurrentTab(1); // 바로 이놈이 탭 을 이동 할 수 있는 비밀.
응용하자면 소스에서 처음 설정이 tabHost.setCurrentTab(0);으로 해놓으면 기본 셋팅이고
버튼 이벤트에 푸쉬에다가 tabHost.setCurrentTab(1); 로 넣어주면 탭이 이동합니다 참쉽죠잉 . ㅋ
http://androidhuman.tistory.com/151
http://blog.naver.com/PostView.nhn?blogId=liar1938&logNo=30171663892
http://blog.daum.net/dayhyub/67