1. Fragment 생성 코드를 재사용 하지 않는 소스


activity_fragment.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

     android:id="@+id/fragmentContainter"
     android:layout_width="match_parent"
     android:layout_height="match_parent">


</FrameLayout>


fragment_sample.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" >


     <Button

          android:id="@+id/button1"

          android:layout_width="match_parent"

          android:layout_height="wrap_content"

          android:text="Button" />


</LinearLayout>


SampleFragment.java

public class SampleFragment extends Fragment

{

     private Button button1 = null;


     @Override

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

     {

          View v = inflater.inflate(R.layout.fragment_sample, container, false);

          
          this.button1 = (Button)v.findViewById(R.id.button1);

          this.button1.setOnClickListener(new View.OnClickListener()

          {

               @Override

               public void onClick(View v)

               {

                    Toast.makeText(getActivity(), "버튼 클릭!!!", Toast.LENGTH_SHORT).show();

               }

          });


          return v;

     }

}


SampleActivity.java

public class SampleActivity extends FragmentActivity

{

     @Override

     protected void onCreate(Bundle savedInstanceState)

     {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.activity_fragment);


          FragmentManager fm = this.getSupportFragmentManager();

          Fragment fragment = fm.findFragmentById(R.id.fragmentContainter);


          if(fragment == null)

          {

               fragment = new SampleFragment();

               fm.beginTransaction()

                    .add(R.id.fragmentContainter, fragment)

                    .commit();

          }

     }

}


Fragment 생성 코드를 재사용 하지 않으면 액티비티의 onCreate 메소드의 똑같은 내용을

계속 copy&paste 해야 합니다.

추상 액티비티 클래스를 하나 만들어서 Fragment 생성 코드를 재사용 할 수 있습니다.


2. Fragment 생성 코드를 재사용 하는 소스


SingleFragmentActivity.java 추상 액티비티 클래스 생성

public abstract class SingleFragmentActivity extends FragmentActivity

{

     protected abstract Fragment createFragment();


     @Override

     protected void onCreate(Bundle savedInstanceState)

     {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.activity_fragment);


          FragmentManager fm = this.getSupportFragmentManager();

          Fragment fragment = fm.findFragmentById(R.id.fragmentContainter);


          if(fragment == null)

          {

               fragment = createFragment();

               fm.beginTransaction()

                    .add(R.id.fragmentContainter, fragment)

                    .commit();

          }

     }

}


SampleActivity.java 소스 변경

public class SampleActivity extends SingleFragmentActivity

{

     @Override

     protected Fragment createFragment()

     {

          return new SampleFragment();

     }

}



실무에 바로 적용하는 안드로이드 프로그래밍 책에서 보고 배운 내용입니다.

profile