Aybars Arslan

Console.WriteLine("Hello World");

Android09 – Fragments

Merhaba arkadaşlar bu yazıda Fragment konusundan bahsedeceğiz.

Öncelikle Fragmentlerin ne olduğu ve ne için kullanıldığından bahsedelim, fragmentler uygulamalarımızın ekranını daha işlevsel ve performanslı kullanmamızı sağlayan araçlardır. Örnek vermek gerekirse fragment; layout ekranımızı çerçevelere(fragmentlerimize) bölme işlemidir. Bir layout içerisine sınırsız fragment parçaları koyabiliriz. Herhangi bir activity oluşturmadan bir layout içerisine oluşturduğumuz fragmentler bir ana activity üzerinden çalışır. Fragment sınıfı oluşturmak için oluşturulan classlar ise aşağıdaki gibi fragmentten extends edilmelidir.

public class MyFragment extends Fragment

Fragmentlerinde activitylerde olduğu gibi kendine özel bir lifecycle’ı vardır.

Fragment – LifeCycle

fragment-lifecycle

Herhangi bir uygulamayı çalıştırdığımız da önceki derslerimizden bildiğimiz gibi ilk olarak activity sınıfının onCreate metodu çalışır sonrasında Fragment sınıfından onAttach çalışır ve böyle yukarıda bulunan resimdeki gibi devam eder.

onCreate metodunda fragment oluşturulur.

onCreateView metodunda oluşturduğumuz layout dosyası çalışır.

…. son olarak onResume eventleriyle uygulama devam eder.

 

Uygulamayı kullanıp exit butonuna bastığımız da oluşacak olan lifecycle ise aşağıdaki gibidir.

fragment-pause-lifecycle

Önce Fragmentimiz onPause durumuna geçiyor, sonrasında activity sınıfımız onPause durumuna geçiyor bu şekilde decam ederek lifecycle tamamlanıyor.

 

Lifecycle’ımızı daha iyi anlaşılabilmesi için örnek bir uygulama ile gösterelim.

Öncelikle bir my_fragment_layout.xml isim bir layout dosyası oluşturuyor ve biçimlendiriyorum.

Ardından activity_main.xml dosyama aşadağı kod ile bu fragmenti tanımlıyorum.

    <fragment
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:name="aybars.arslan.fragmentornek.MyFragment"
        android:id="@+id/my_fragment"
        android:layout_marginTop="50dp"
        tools:layout="@layout/my_fragment_layout"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

Sonrasında sırasıyla lifecycle’daki işlemlerin çalışma sırasını görmek için MainActivity.java ve MyFragment.java classlarımı aşağıdaki gibi yazıyorum.

MainActivity.java

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("-----","onCreate methodu - ACTIVITY");
        setContentView(R.layout.activity_main);

        MyFragment fragmentim = new MyFragment();

        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.commit();

    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.e("-----", "onStart methodu - ACTIVITY");
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Log.e("-----", "onResume methodu - ACTIVITY");
    }

    @Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();
        Log.e("-----", "onRestart methodu - ACTIVITY");
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        Log.e("-----", "onPause methodu - ACTIVITY");
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        Log.e("-----", "onStop methodu - ACTIVITY");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        Log.e("-----", "onSaveInstance methodu - ACTIVITY");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onRestoreInstanceState(savedInstanceState);
        Log.e("-----", "onRestoreInstance methodu - ACTIVITY");
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.e("-----", "onDestroy methodu - ACTIVITY");
    }

}

MyFragment.java

public class MyFragment extends Fragment {

    @Override
    public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
        super.onAttach(activity);
        Log.i("-----", "onAttach methodu - FRAGMENT");
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        Log.i("-----", "onCreate methodu - FRAGMENT");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        Log.i("-----", "onCreateView methodu - FRAGMENT");
        return inflater.inflate(R.layout.my_fragment_layout, container, false);

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        Log.i("-----", "onActivityCreated methodu - FRAGMENT");
    }

    @Override
    public void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.i("-----", "onStart methodu - FRAGMENT");
    }

    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Log.i("-----", "onResume methodu - FRAGMENT");
    }

    @Override
    public void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        Log.i("-----", "onPause methodu - FRAGMENT");
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        Log.i("-----", "onSaveInstanceState methodu - FRAGMENT");
    }

    @Override
    public void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        Log.i("-----", "onStop methodu - FRAGMENT");
    }

    @Override
    public void onDestroyView() {
        // TODO Auto-generated method stub
        super.onDestroyView();
        Log.i("-----", "onDestroyView methodu - FRAGMENT");
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.i("-----", "onDestroy methodu - FRAGMENT");
    }

}

Aldığım log sonuçu aşağıdaki gibidir. bu örneği çalıştırarak çalışma mantığını daha iyi anlayabileceğimizi düşünüyorum.

frament_log1

fragment_log2

kaynak kod için tıklayınız.

farklı bir fragment uygulamasını incelemek için tıklayınız.

emrealtunbilek.com adresinden kod hakkında yardım aldım. click link .

İyi çalışmalar

Paylaş !

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir