1. Main Activity
import android.app.ActionBar; package com.appstudio.helloandroid; import android.app.ActionBar.Tab; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); final ActionBar bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); bar.addTab(bar.newTab() .setText("First") .setTabListener(new TabListener( this,"first",FirstFragment.class))); bar.addTab(bar.newTab() .setText("Second") .setTabListener(new TabListener ( this,"second",SecondFragment.class))); bar.addTab(bar.newTab() .setText("Third") .setTabListener(new TabListener ( this,"third",ThirdFragment.class))); if (savedInstanceState!=null){ bar.setSelectedNavigationItem( savedInstanceState.getInt("tab", 0)); } bar.show(); } @Override protected void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState); outState.putInt("tab", getActionBar().getSelectedNavigationIndex()); } //ActionBar.TabListner 구현 Tab에 이벤트가 발생했을 때 지시하는 역할 public static class TabListener implements ActionBar.TabListener{ private final Activity mActivity; private final String mTag; private final Class mClass; private final Bundle mArgs; private Fragment mFragment; public TabListener(Activity activity, String tag, Class clz){ this(activity,tag,clz,null); } public TabListener(Activity activity, String tag, Class clz, Bundle args){ mActivity = activity; mTag = tag; mClass = clz; mArgs = args; mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag); if (mFragment != null && !mFragment.isDetached()){ FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction(); ft.detach(mFragment); ft.commit(); } } //onTabSelected() 탭이 선택되었을 때 호출되는 콜백 public void onTabSelected(Tab tab, FragmentTransaction ft){ if (mFragment == null){ mFragment = Fragment.instantiate(mActivity, mClass.getName(),mArgs); //fagment의 정적 메소드인 instantiate메소드를 이용해 //mClass의 객체 인스턴스를 만든 다음에 반환 ft.add(android.R.id.content, mFragment, mTag); }else{ ft.attach(mFragment); } } //onTabUnselected() 탭이 선택 해제되었을 때 호출되는 콜백 public void onTabUnselected(Tab tab, FragmentTransaction ft){ if(mFragment != null){ ft.detach(mFragment); } } //onTabReselected() 탭이 다시 선택될 때 호출 public void onTabReselected(Tab tab, FragmentTransaction ft){ Toast.makeText(mActivity, "Reselected!", Toast.LENGTH_SHORT).show(); } } //탭 안에 보여울 프래그 먼트들. public static class FirstFragment extends Fragment{ int mNum; static FirstFragment newInstance(int num){ FirstFragment f = new FirstFragment(); Bundle args = new Bundle(); args.putInt("num", num); f.setArguments(args); return f; } @Override public void onCreate (Bundle savedInstanceState){ super.onCreate(savedInstanceState); mNum = getArguments() != null ? getArguments().getInt("num"):1; } @Override public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View v = inflater.inflate(R.layout.hello_first, container,false); View tv = v.findViewById(R.id.text); ((TextView)tv).setText("Fragment #"+FirstFragment.class.getName()); return v; } } public static class SecondFragment extends Fragment{ int mNum; static SecondFragment newInstance(int num){ SecondFragment f = new SecondFragment(); Bundle args = new Bundle(); args.putInt("num", num); f.setArguments(args); return f; } @Override public void onCreate (Bundle savedInstanceState){ super.onCreate(savedInstanceState); mNum = getArguments() != null ? getArguments().getInt("num"):1; } @Override public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View v = inflater.inflate(R.layout.hello_second, container,false); View tv = v.findViewById(R.id.text); ((TextView)tv).setText("Fragment #"+SecondFragment.class.getName()); return v; } } public static class ThirdFragment extends Fragment{ int mNum; static ThirdFragment newInstance(int num){ ThirdFragment f = new ThirdFragment(); Bundle args = new Bundle(); args.putInt("num", num); f.setArguments(args); return f; } @Override public void onCreate (Bundle savedInstanceState){ super.onCreate(savedInstanceState); mNum = getArguments() != null ? getArguments().getInt("num"):1; } @Override public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View v = inflater.inflate(R.layout.hello_third, container,false); View tv = v.findViewById(R.id.text); ((TextView)tv).setText("Fragment #"+ThirdFragment.class.getName()); return v; } } }
2. hello_first.xml
hello_first, hello_second, hello_third 를 어떻게 R.layout에 넣을지 멘붕이었는데
그냥 xml 파일을 만들어주면되는거였다 하하하
지난 달부터 이거 만들고 싶어서 열심히 찾아봤었는데 하하하하
그땐 열나게 탭 위젯으로 했는데 똑같은 코드로 해도 내컴에선 안되더니...
안드로이드 4.0이상 버전에서는 탭위젯 대신 액션바를 사용해야한다고 한다!
역시 무식하면 삽질이지 :-)
MFC | OpenCV 개발환경 (0) | 2014.11.14 |
---|---|
Tistory | 게시글 썸네일(Thumbnail) 지정하기 (0) | 2014.10.19 |
Tistory | 최근포스트(Recent Post) 접기 (0) | 2014.10.15 |
Tistory | HTML을 이용하여 소스코드 올리기 (0) | 2014.10.05 |
Android | 소켓통신 (1) | 2014.08.22 |
Android | XML 데이터 파싱 (서버에서 데이터 받아오기) (0) | 2014.07.25 |
Android | 프로젝트생성 (0) | 2014.07.13 |
Android | 개발환경 (0) | 2014.07.11 |