๋ฐํ์ : ์ก์์
๋ฐํ์ฃผ์ : ๋ ์ด์์ ๋ถ๊ธฐ
๋ฐํ์ผ์ : 2018-09-07
[TOC]
- ๋ ๋๊น์ง ์๋๋ก์ด๋(์ค์ค์ ์ง์)
- https://developer.android.com/training/basics/fragments/fragment-ui?hl=ko
- https://developer.android.com/training/basics/fragments/communicating?hl=ko
์๋๋ก์ด๋ ํ๋ก์ ํธ์์ ์์ด์ฝ์ด ์๋ mipmap ๋๋ ํฐ๋ฆฌ๋ ๊ธฐ๊ธฐ์ ๋ฐ๋(density)์ ๋ฐ๋ผ ๋ถ๊ธฐํ๋๋ก ๋์ด์๋ค. ์ฑ์ด ์คํ๋ ๋ ๊ธฐ๊ธฐ์ ๋ฐ๋์ ๋ฐ๋ผ ํด๋น ํด๋์ ์์ด์ฝ์ด ์ ํ๋๋ ๊ฒ์ด๋ค.
๋ ์ด์์๋ ์ด๋ฐ์์ผ๋ก ๋ถ๊ธฐํ๋๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
- ๋ ์ด์์ ๋ถ๊ธฐ๋ฅผ ์ํด res ๋๋ ํฐ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ์ ๋๋ฅด๊ณ [New -> Android resource directory]๋ฅผ ํด๋ฆญํ์ฌ ๋ฆฌ์์ค ๋๋ ํฐ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ค
- New Resource Directory ์ฐฝ์์ Resource type:์ 'layout'์ ์ ํํ๊ณ , ์ผ์ชฝ ํ๋จ์ Available qualifiers ์์์์ 'Orientation'์ ์ ํํ ๋ค์, ๊ฐ์ด๋ฐ์ ์๋ >> ๋ฒํผ์ ๋๋ฅธ๋ค.
- Screen orientation: ํญ๋ชฉ์์ 'Landscape'๋ฅผ ์ ํํ๋ค. ๊ทธ๋ฌ๋ฉด Directory name:์ด layout-land๋ก ์ค์ ๋๋ฉฐ, ์ด ๋๋ ํฐ๋ฆฌ์ ์๋ ๋ ์ด์์ XML์ ๊ฐ๋ก ๋ชจ๋์ ์ฐ์ ์ผ๋ก ์ ์ฉ๋๋ ๋ ์ด์์์ด ๋๋ค.
- layout/activity_main.xml ํ์ผ์ layout-land ๋๋ ํฐ๋ฆฌ์ ๋ณต์ฌํด์ ๋ถ์ฌ๋ฃ๋๋ค.
- ๊ฐ๋ก ๋ชจ๋์ ์ธ๋ก ๋ชจ๋์ ๋ ์ด์์์ ์ค์ ํ๋ค.
๋ ์ด์์ ๋ถ๊ธฐ๋ฅผ ํ๋๊ทธ ๋จผํธ์ ์กฐํฉํ๋ฉด ๋ค์ํ ํ๋ฉด ๊ตฌ์ฑ์ ๋ณด๋ค ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์๋ค.
ํ๋๊ทธ๋จผํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ๋ฅผ ์ง์ํ๋ ์ฑ์ ๋ง๋ค ๋, ํ๋ฉด ํฌ๊ธฐ๋ ๋ฐฉํฅ์ ๋ฐ๋ผ ํ๋๊ทธ๋จผํธ๋ฅผ ์ฌํ์ฉํ์ฌ ๋ ์ด์์์ ๊ตฌ์ฑํ ์ ์๋ค. ์ด๋ ํํ๋ฆฟ๊ณผ ํธ๋ํฐ์ ๋์์ ์ง์ํ๋ ์ฑ์ ๊ฐ๋ฐํ ๋ ์ ์ฉํ๋ค.
์์)
FragmentManager ํด๋์ค ๋ฐํ์์ ๋์ ์ผ๋ก ํ๋๊ทธ๋จผํธ๋ฅผ ์ถ๊ฐ๋ ์ญ์ , ๋๋ ๊ต์ฒดํ ์ ์๋ ๋ฉ์๋๋ฅผ ์ ๊ณต
์์ฑํ ์์ ์ ๋์์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ์กํฐ๋นํฐ๊ฐ ์์ํ๋ฉด HeadlinesFragment๋ฅผ ๋์ ์ถ๊ฐํ๋ค.
- HeadlinesFragment์์ ์์ดํ ์ด ์ ํ๋๋ฉด onHeadlineSelected ์ฝ๋ฐฑ์ด ํธ์ถ๋๋ค.
- ์กํฐ๋นํฐ์์ ArticleFragment๋ก ํ๋๊ทธ๋จผํธ๋ฅผ ๊ต์ฒดํ๋ค.
- ํ๋๊ทธ๋จผํธ๊ฐ ๊ต์ฒด๋๊ธฐ ์ ์ ๋ฐฑ์คํ์ ์ ์ฅํจ์ผ๋ก์จ ๋ค๋ก ๊ฐ๊ธฐ๋ก HeadlinesFragment๋ก ๋์๊ฐ ์ ์๋ค.
์ ๋ชฉ์ ๋๋ฅด๋ฉด ๋ด์ฉ์ ํ์ํ๋ ๊ฐ๋จํ ์ฑ์ ์ํ์ ์์ฑํ ๊ฒ์ด๋ค.
ํ๋๊ทธ๋จผํธ A์ ์ ๋ชฉ ๋ฆฌ์คํธ๊ฐ ํ์๋๊ฒ ํ๊ณ , ์ ๋ชฉ์ ํด๋ฆญํ๋ฉด ํ๋๊ทธ๋จผํธ B์ ๋ด์ฉ์ด ๋ณด์ด๊ฒ ํ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ํด Article ํด๋์ค๋ฅผ ์๋ก ๋ง๋ค๊ณ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
public class Articles {
// ์ ๋ชฉ
static String[] Headlines = {
"์ ๋ชฉ 1", "์ ๋ชฉ 2"
};
// ๋ด์ฉ
static String[] Articles = {
"์ด๊ฒ์ ์ ๋ชฉ1์ ๋ด์ฉ์
๋๋ค.",
"์ด๊ฒ์ ์ ๋ชฉ2์ ๋ด์ฉ์
๋๋ค."
};
}
ํ๋ฉด์ด ์์ ๊ธฐ๊ธฐ์ ํฐ ๊ธฐ๊ธฐ(7์ธ์น ์ด์ ํ๋ธ๋ฆฟ)์์ ๋ ์ด์์๊ณผ ์ฑ์ ๋์์ด ๋ค๋ฅด๊ฒ ํ๋ ค๊ณ ํ๋ค.
ํธ๋ํฐ์ฒ๋ผ ํ๋ฉด ํฌ๊ธฐ๊ฐ 7์ธ์น ๋ฏธ๋ง์ธ ๊ธฐ๊ธฐ์์๋ ํ๋๊ทธ๋จผํธ A์ ๋ฆฌ์คํธ๋ฅผ ํด๋ฆญํ๋ฉด ํ๋๊ทธ๋จผํธ B์ ๋ด์ฉ์ด ํ์๋๊ฒ ํ๊ณ , ํ๋ธ๋ฆฟ์ฒ๋ผ ํฐ ๊ธฐ๊ธฐ์์๋ ํ ํ๋ฉด์ ํ๋๊ทธ๋จผํธ A์ B๊ฐ ๊ฒฐํฉ๋์ด ๋ฆฌ์คํธ์ ๋ด์ฉ์ด ๋ชจ๋ ํ์๋๊ฒ ํ๋ ค๊ณ ํ๋ค.
-
ํ๋๊ทธ๋จผํธ A์ ํด๋นํ๋ HeadlinesFragment๋ฅผ ์์ฑํ๋ค - ์ ๋ชฉ์ ํ์ํ๋ ๋ฆฌ์คํธ๋ฅผ ํ์
/** * ์ ๋ชฉ์ ํ์ํ ๋ฆฌ์คํธ ํ๋๊ทธ๋จผํธ */ public class HeadlinesFragment extends ListFragment { // ์ด ํ๋๊ทธ๋จผํธ๋ฅผ ํฌํจํ๋ ์กํฐ๋นํฐ๋ ๋ฐ๋์ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํจ interface OnHeadlineSelectedListener { // ์ ๋ชฉ์ด ์ ํ๋์์ ๋ ํธ์ถ๋จ void onHeadlineSelected(int position); } private OnHeadlineSelectedListener mListener; @Override public void onCreate(@Nullable Bundle savedInstanceState){ super.onCreate(savedInstanceState); // Articles ์ Headlines ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ฆฌ์คํธ ๋ทฐ๋ฅผ ์ํ ArrayAdapter ๋ฅผ ์์ฑ setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, Articles.Headlines)); } @Override public void onAttach(Context context) { super.onAttach(context); // ์ด ํ๋๊ทธ๋จผํธ๋ฅผ ํฌํจํ๋ Context ๋ ๋ฐ๋์ OnHeadlineSelectedListener ๋ฅผ ๊ตฌํํด์ผ ํ๋ค. // ๊ทธ๋ ์ง ์์ผ๋ฉด ClassCastException ์ด ๋ฐ์ํ๊ณ ์ฑ์ ์ข ๋ฃํ๋ค. try { mListener = (OnHeadlineSelectedListener) context; }catch (ClassCastException e){ throw new ClassCastException(context.toString() + " must implement OnHeadlineSelectedListener"); } } @Override public void onListItemClick(ListView l, View v, int position, long id){ super.onListItemClick(l, v, position, id); // ์ ํ๋ ์์น๋ฅผ ์กํฐ๋นํฐ์ ์๋ ค ์ค if (mListener != null) { mListener.onHeadlineSelected(position); } } }
์ด ํ๋๊ทธ๋จผํธ๋ ListFragment๋ฅผ ์์ํ๋ฉฐ ์ ๋ชฉ์ ๋ฆฌ์คํธ๋ฅผ ํ์ํ๊ณ ์ ๋ชฉ์ ํด๋ฆญํ์ ๋ ์ด ํ๋๊ทธ๋จผํธ๋ฅผ ํฌํจํ๊ณ ์๋ ์กํฐ๋นํฐ์ ์ฝ๋ฐฑ์ ํธ์ถํ๋๋ก ๋์ด์๋ค. ์ด ํ๋๊ทธ๋จผํธ๋ฅผ ํฌํจํ ์กํฐ๋นํฐ๋ ๋ฐ๋์ OnHeadlineSelectedListener ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก onAttach() ๋ฉ์๋์์ ๊ฐ์ ๋ก ์กํฐ๋นํฐ์ ์ฐ๊ฒฐํ๊ณ ์๋ค.
-
ํ๋๊ทธ๋จผํธ์ ๋ ์ด์์ ํ์ผ์ ์ค๋น
fragment_article
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/article_text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
-
ํ๋๊ทธ๋จผํธ B์ ํด๋นํ๋ ArticleFragment ํ๋๊ทธ๋จผํธ๋ฅผ ์์ฑํ๋ค - ๋ด์ฉ์ ํ ์คํธ๋ทฐ์ ํ์
/** * HeadlinesFragment ๋ฅผ ํด๋ฆญํ์ ๋ ์ ๋ชฉ๋ฅผ ํ์ํ ํ๋๊ทธ๋จผํธ */ public class ArticleFragment extends Fragment { public static final String ARG_POSITION = "position"; private int mCurrentPosition = -1; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // ํ๋ฉด์ด ํ์ ๋๋ฉด ์ด์ ์ ์ ํ๋ ์์น๋ฅผ ๋ณต์ if (savedInstanceState != null) { mCurrentPosition = savedInstanceState.getInt(ARG_POSITION); } // ํ๋ฉด ๋ ์ด์์์ TextView ํ๋๋ง ์๋ ๋ ์ด์์์ ์ฌ์ฉ return inflater.inflate(R.layout.fragment_articles, container, false); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Bundle args = getArguments(); if (args != null) { // ํ๋๊ทธ๋จผํธ๊ฐ ์์ฑ๋์์ ๊ฒฝ์ฐ updateArticleView(args.getInt(ARG_POSITION)); } else if (mCurrentPosition != -1) { // ํ๋ฉด ํ์ ๋ฑ์ ๊ฒฝ์ฐ updateArticleView(mCurrentPosition); } } // ์ ํ๋ ์ ๋ชฉ์ ๋ด์ฉ์ ํ์ public void updateArticleView(int position) { TextView article = (TextView) getView().findViewById(R.id.article_text); article.setText(Articles.Articles[position]); mCurrentPosition = position; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // ํ๋ฉด์ด ํ์ ๋ ๋, ์ ํ๋ ์์น๋ฅผ ์ ์ฅ outState.putInt(ARG_POSITION, mCurrentPosition); } }
์ด ํ๋๊ทธ๋จผํธ๋ ๋ช ๋ฒ์งธ ์ ๋ชฉ์ด ์ ํ๋์๋์ง์ ๋ฐ๋ผ์ ํด๋น ์ ๋ชฉ์ ๋ด์ฉ์ Articles.Articles ๋ฐฐ์ด์์ ๊ฐ์ ธ์์ ํ ์คํธ๋ทฐ์ ํ์ํ๋ค.
ํ๋๊ทธ๋จผํธ๋ ์กํฐ๋นํฐ ์๋ช ์ฃผ๊ธฐ์ ์ฐ๊ด๋ ๋ณต์กํ ์ฌ์ ์ผ๋ก ์์ฑ์๋ฅผ ํตํ ํ๋ผ๋ฏธํฐ ์ ๋ฌ์ด ๊ธ์ง๋์ด ์๋ค๊ณ ํ๋ค. ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง๋ ์์ฑ์๋ฅผ ๋ง๋ค๋ฉด ์๋๋ก์ด๋ ์คํ๋์ค๊ฐ ๋นจ๊ฐ ์ค๋ก ํ์ํ ๊ฒ์ด๋ค. ๋์ Bundle ๊ฐ์ฒด๋ฅผ Argument๋ก ์ ๋ฌํ ์ ์๋ค. ํ๋๊ทธ๋จผํธ๋ฅผ ์ฒ์ ์์ฑํ์ ๋๋ Argument๋ก ์ ๋ชฉ ๋ฒํธ๋ฅผ ์ ๋ฌ๋ฐ์์ ์ ๋ชฉ์ ํ์ํ๊ณ , ํ๋ฉด์ด ํ์ ํ๋ฉด ๋ง์ง๋ง์ ์ ํ๋ ๊ธฐ์ฌ ๋ฒํธ๋ฅผ onSavedInstanceState() ๋ฉ์๋์์ ์ ์ฅํ๊ณ onCreateView() ๋ฉ์๋์์ ๋ณต์ํ๋ค.
-
๋ ํ๋๊ทธ๋จผํธ๋ฅผ ํฌํจํ ์กํฐ๋นํฐ์ธ MainActivity์ธ ๋ ์ด์์ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <FrameLayout android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
๋ ์ด์์์ ๋ด๋ถ์๋ ํ๋๊ทธ๋จผํธ๋ฅผ ํ์ํ ์์ญ์ธ FrameLayout์ ๋ฐฐ์นํ์๊ณ id๋ฅผ ๋ถ์ฌํ๋ค.
์ด ์์ญ์ ์ต์ด์๋ ํ๋๊ทธ๋จผํธ A๋ฅผ ํ์ํ๊ณ , ์ ๋ชฉ์ ์ ํํ๋ฉด ํ๋๊ทธ๋จผํธ B๋ก ๊ต์ฒดํ ๊ฒ์ด๋ค.
-
MainActivity ์์ฑ
public class MainActivity extends AppCompatActivity implements HeadlinesFragment.OnHeadlineSelectedListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ํ๋ฉด ํ์ ์ HeadlinesFragment ๊ฐ ์ฌ์์ฑ๋๋ ๊ฒ ๋ฐฉ์ง if (savedInstanceState == null) { HeadlinesFragment headlinesFragment = new HeadlinesFragment(); // headlinesFragment ๋ฅผ R.id.fragment_container ์์ญ์ ์ถ๊ฐ getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container, headlinesFragment) .commit(); } } // HeadlinesFragment ์ ์ ๋ชฉ์ด ์ ํ๋์์ ๋ ํธ์ถ @Override public void onHeadlineSelected(int position) { // ArticleFragment ํ๋๊ทธ๋จผํธ ์์ฑ ArticleFragment newArticleFragment = new ArticleFragment(); // Argument ๋ก ์ ๋ชฉ ๋ฒํธ ์ ๋ฌ Bundle args = new Bundle(); args.putInt(ArticleFragment.ARG_POSITION, position); newArticleFragment.setArguments(args); // R.id.fragment_container ์์ด๋๋ฅผ ๊ฐ์ง ์์ญ์ //ํ๋๊ทธ๋จผํธ๋ฅผ articleFragment ๋ก ๊ต์ฒดํ๊ณ // ํ๋๊ทธ๋จผํธ ๋งค๋์ ์ BackStack ์ ์๋๋ค getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container, newArticleFragment) .addToBackStack(null) .commit(); } }
MainActivity๋ฅผ ์คํ ์ HeadlinesFragment๋ฅผ ํ์ํ๊ณ ์ ๋ชฉ์ ํด๋ฆญํ์ ๋ onHeadlineSelected() ์ฝ๋ฐฑ์ด ํธ์ถ๋๋ฉฐ, ArticleFragment๋ก ๊ต์ฒด๋๋ค.
์ฃผ์ํด์ ๋ณผ ๋ถ๋ถ์ onCreate() ๋ฉ์๋์์ savedInstanceState == null ์ผ ๋๋ง HeadlinesFragment๋ฅผ ์ถ๊ฐํ๊ณ ์๋ค. ์ด ์กฐ๊ฑด์ด ์๋ค๋ฉด ํ๋ฉด์ด ํ์ ๋ ๋๋ง๋ค ๊ธฐ์กด HeadlinesFragment๊ฐ ์ ์ง๋๋ฉฐ ์๋ก์ด HeadlinsFragment๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ savedInstanceState๊ฐ null์ธ์ง ๊ฒ์ฌํ๋ ๋ก์ง์ ์์ผ๋ฉด ์๋๋ค. ์ด์ ๋ ์กํฐ๋นํฐ๋ฅผ ํ์ ํ์ฌ ๊ฐ์ ๋ก ์ฌ์์ฑํด๋ ํ๋๊ทธ๋จผํธ๋ ํ๋๊ทธ๋จผํธ ๋งค๋์ ๊ฐ ๋ณ๋๋ก ๊ด๋ฆฌํ๋ฉฐ ์ฌ์์ฑ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
onHeadlineSelected() ์ฝ๋ฐฑ ๋ฉ์๋์์ ๊ธฐ์ฌ์ ๋ด์ฉ์ ํ์ํ๋ ArticleFragment๋ก ๊ต์ฒดํ ๋ addToBackStack(null) ๋ฉ์๋๋ฅผ ํตํด์ ํ๋๊ทธ๋จผํธ์ ๋ฐฑ์คํ์ ์ถ๊ฐํ๋ค. ๋ฐฑ์คํ(BackStack)์ด๋, ํ๋๊ทธ๋จผํธ ๋งค๋์ ๊ฐ ๋ด๋ถ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์๋ ํ๋๊ทธ๋จผํธ๋ฅผ ๊ด๋ฆฌํ๋ ์คํ์ด๋ค.
์๋๋ก์ด๋์ ๋ ์ด์์์ ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ถ๊ธฐํ๊ฒ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๊ธฐ๋ณธ ๋ ์ด์์์ ๊ฒฝ๋ก๋ layout/activity_main.xml์ด์ง๋ง, layout-large.activity_main.xml์ ์ถ๊ฐํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก๋ layout ๋๋ ํฐ๋ฆฌ์ XML ํ์ผ์ ์ฐธ์กฐํ๊ณ , ํ๋ฉด์ด 7์ธ์น ์ด์์ผ๋ก ํฐ ๊ธฐ๊ธฐ์์๋ layout_large ๋๋ ํฐ๋ฆฌ์ XML ํ์ผ์ ์ฐธ์กฐํ ์ ์๋ค.
-
7์ธ์น ์ด์์ ๋ ์ด์์์ ์ํ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ค.
-
layout-large ์ activity_main.xml์ ์ถ๊ฐํ๋ค.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/headlines_fragment" android:name="com.example.user.dynamicuiexam.HeadlinesFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" tools:layout="@android:layout/simple_list_item_1" /> <fragment android:id="@+id/article_fragment" android:name="com.example.user.dynamicuiexam.ArticleFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" tools:layout="@layout/fragment_articles" /> </LinearLayout>
-
MainActivity ์ฝ๋ ์์
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // layout-large ์ ๋ ์ด์์์๋ fragment_container ๊ฐ ์์ if (findViewById(R.id.fragment_container) != null) { // ํ๋ฉด ํ์ ์ HeadlinesFragment ๊ฐ ์ฌ์์ฑ๋๋ ๊ฒ ๋ฐฉ์ง if (savedInstanceState == null) { HeadlinesFragment headlinesFragment = new HeadlinesFragment(); // headlinesFragment ๋ฅผ R.id.fragment_container ์์ญ์ ์ถ๊ฐ getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container, headlinesFragment) .commit(); } } }
onCreate() ์์ layout-large์ธ์ง ์๋์ง์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌ
layout-large์ ๋ ์ด์์์ ๋ฏธ๋ฆฌ ๋ ๊ฐ์ ํ๋๊ทธ๋จผํธ๊ฐ ์์น ํด ์์ผ๋ฏ๋ก ์๋ฌด๊ฒ๋ ํ์ง ์์๋ ๋๋ค.
@Override public void onHeadlineSelected(int position) { ArticleFragment articleFragment = (ArticleFragment) getSupportFragmentManager().findFragmentById(R.id.article_fragment); // layout-large ์ ๊ฒฝ์ฐ null ์ด ์๋ if (articleFragment == null) { // ArticleFragment ํ๋๊ทธ๋จผํธ ์์ฑ ArticleFragment newArticleFragment = new ArticleFragment(); // Argument ๋ก ๊ธฐ์ฌ ๋ฒํธ ์ ๋ฌ Bundle args = new Bundle(); args.putInt(ArticleFragment.ARG_POSITION, position); newArticleFragment.setArguments(args); // R.id.fragment_container ์์ด๋๋ฅผ ๊ฐ์ง ์์ญ์ ํ๋๊ทธ๋จผํธ๋ฅผ articleFragment ๋ก ๊ต์ฒดํ๊ณ // ํ๋๊ทธ๋จผํธ ๋งค๋์ ์ BackStack ์ ์๋๋ค getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container, newArticleFragment) .addToBackStack(null) .commit(); } else { articleFragment.updateArticleView(position); } } }
๊ธฐ์กด์ articleFragment๋ผ๋ ๋ณ์๋ช ์ newArticleFragment๋ก ์์ ํ์๊ณ , layout-large์ ๊ฒฝ์ฐ์๋ article_fragment ์์ด๋๋ก ์ด๋ฏธ ArticleFragment๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฏ๋ก, ์ด๊ฒ์ด null์ธ์ง ์๋์ง์ ๋ฐ๋ผ์ ์๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํ๋๋ก ์์ ํ๋ค. ๋ง์ฝ layout-large์ ๊ฐ์ด ArticleFragment๊ฐ ์ด๋ฏธ ์๋ค๋ฉด ๊ทธ ํ๋๊ทธ๋จผํธ์ ๊ธฐ์ฌ๋ง updateArticleView()๋ฅผ ํตํด ๊ฐฑ์ ํ๋ฉด ๋๋ค.