안드로이드 Fragment 활용하기
프로그래밍/Android 2013. 8. 28. 10:48안드로이드 Fragment 활용하기
Fragments
- Fragment 는 Activity 의 사용자 인터페이스를 구성하는 한 부분이며 Activity 는 여러개의 Fragment 를 조합하여 multi-pane UI 를 구성할 수 있다.
- Fragment 는 자기 자신의 lifecycle 을 갖으며 Activity 의 lifecycle에 영향을 받는다.
- Fragment 는 Activity 내에 embeded 되며 Fragment 는 자신의 layout을 정의한다.
Fragment 생성
public class ArticleFragment extends Fragment{
// Fragment 의 layout 을 설정하기 위해서는 onCreateView() 메소드를 사용한다.
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
return inflater.inflate( R.layout.article_view, container, false);
}
}
Activity 에 Fragment 추가하기
- 런타임시에 Activity 에 Fragment 를 추가하기 위해서는 FragmentManager, FragmentTransaction 을 사용한다.
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
// add 메소드의 첫번째 파라미터로는 해당 Fragment 가 포함될 ViewGroup 을 나타냅니다.
transaction.add(R.id.fragment_container, firstFragment);
// Fragment 의 변경이 있은 후에는 반드시 commit() 메소드를 호출하여 변경사항을 반영해 줍니다.
transaction.commit();
Fragment 간의 통신
- Activity 내의 각각의 Fragment 는 서로간의 통신을 하기 위해서는 반드시 Activity 를 거쳐야 한다. 다른 Fragment 의 존재를 알 수 없기 때문이다.
- Activity 는 getSupportFragmentManger().findFragmentById() 명령어를 통해 Activity 내의 모든 fragment 에 접근이 가능하다.
- Fragment 는 onAttach() 이벤트시에 Activity 에 대한 참조를 얻을 수 있다. 따라서 각각의 Fragment 는 이벤트시에 Activity 의 메소드를 호출 할 수 있다.
- 이렇게 할 경우 각각의 Fragment 의 독립성을 유지 할 수 있다.
onAttach() 시에 Activity 에 대한 참조 획득
public class HeadlinesFragment extends ListFragment {
OnHeadlineSelectedListener mCallback;
// Container Activity must implement this interface
public interface OnHeadlineSelectedListener {
public void onArticleSelected(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
...
}
클릭 이벤트 발생시 Activity 의 메소드 호출
// Fragment 의 리스트 목록을 클릭했을 때 호출되는 메소드
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// Send the event to the host activity
mCallback.onArticleSelected(position);
}
Activity 에서는 onArticleSelected 에서 다른 Fragment, ArticleFragment 의 메소드 호출
public static class MainActivity extends Activity
implements HeadlinesFragment.OnHeadlineSelectedListener{
...
public void onArticleSelected(int position) {
// The user selected the headline of an article from the HeadlinesFragment
// Do something here to display that article
// Activity 내어서는 getSupportFragmentManager() 메소드를 통해 FragmentManger 에 접근 가능하다.
ArticleFragment articleFrag = (ArticleFragment)getSupportFragmentManager().findFragmentById(R.id.article_fragment);
if (articleFrag != null) {
// If article frag is available, we're in two-pane layout...
// Call a method in the ArticleFragment to update its content
articleFrag.updateArticleView(position);
} else {
// Otherwise, we're in the one-pane layout and must swap frags...
// Create fragment and give it an argument for the selected article
ArticleFragment newFragment = new ArticleFragment();
Bundle args = new Bundle();
args.putInt(ArticleFragment.ARG_POSITION, position);
newFragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack so the user can navigate back
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
}
}
}
'프로그래밍 > Android' 카테고리의 다른 글
안드로이드 다른 앱과 상호작용하기 (0) | 2013.08.28 |
---|---|
안드로이드 File 다루기 (0) | 2013.08.28 |
안드로이드 테마 설정하기 (0) | 2013.08.27 |
안드로이드 key-value 데이터 다루기 Preferences (0) | 2013.08.27 |
안드로이드 데이터베이스 다루기 SQLiteOpenHelper 사용 (0) | 2013.08.27 |