Parça oluşturma

Parça, bir etkinlik içindeki kullanıcı arayüzünün modüler bir bölümünü temsil eder. Bir parçanın kendi yaşam döngüsü vardır, kendi giriş etkinliklerini alır ve kapsayıcı etkinliği çalışırken parça ekleyebilir veya kaldırabilirsiniz.

Bu dokümanda, bir parçanın nasıl oluşturulacağı ve bir etkinliğe nasıl dahil edileceği açıklanmaktadır.

Ortamınızı ayarlama

Parçalar AndroidX Fragment kitaplığına bağımlılık gerektirir. Bu bağımlılığı dahil etmek için projenizin settings.gradle dosyasına Google Maven deposunu eklemeniz gerekir.

Modern

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        ...
    }
}

Kotlin

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        ...
    }
}

AndroidX Fragment kitaplığını projenize dahil etmek için uygulamanızın build.gradle dosyasına aşağıdaki bağımlılıkları ekleyin:

Modern

dependencies {
    def fragment_version = "1.6.2"

    // Java language implementation
    implementation "androidx.fragment:fragment:$fragment_version"
    // Kotlin
    implementation "androidx.fragment:fragment-ktx:$fragment_version"
}

Kotlin

dependencies {
    val fragment_version = "1.6.2"

    // Java language implementation
    implementation("androidx.fragment:fragment:$fragment_version")
    // Kotlin
    implementation("androidx.fragment:fragment-ktx:$fragment_version")
}

Parça sınıfı oluşturma

Bir parça oluşturmak için AndroidX Fragment sınıfını genişletin ve bu parçanın, Activity sınıfı oluşturmaya benzer şekilde uygulama mantığınızı ekleme yöntemlerini geçersiz kılın. Kendi düzenini tanımlayan minimal bir parça oluşturmak için parçanızın düzen kaynağını aşağıdaki örnekte gösterildiği gibi temel oluşturucuya sağlayın:

Kotlin

class ExampleFragment : Fragment(R.layout.example_fragment)

Java

class ExampleFragment extends Fragment {
    public ExampleFragment() {
        super(R.layout.example_fragment);
    }
}

Fragment kitaplığı daha özel parça temel sınıfları da sağlar:

DialogFragment
Kayan bir iletişim kutusu görüntüler. Parçalar, Dialog öğesinin oluşturulmasını ve temizlenmesini otomatik olarak işlediğinden iletişim kutusu oluşturmak için bu sınıfı kullanmak Activity sınıfındaki iletişim yardımcısı yöntemlerini kullanmaya uygun bir alternatiftir. Daha fazla bilgi için DialogFragment içeren iletişim kutuları görüntüleme
konusuna bakın.
PreferenceFragmentCompat
Preference nesnelerinin hiyerarşisini liste olarak görüntüler. PreferenceFragmentCompat uygulamasını kullanarak uygulamanız için bir ayarlar ekranı oluşturabilirsiniz.

Etkinliğe parça ekleme

Genel olarak, parçanızın bir AndroidX FragmentActivity içine yerleştirilmesi gerekir. Böylece, ilgili etkinliğin düzenine kullanıcı arayüzünün bir kısmı katkı sağlar. FragmentActivity, AppCompatActivity için temel sınıftır. Bu nedenle, uygulamanızda geriye dönük uyumluluk sağlamak için zaten AppCompatActivity alt sınıfını kullanıyorsanız etkinlik temel sınıfınızı değiştirmeniz gerekmez.

Parçanızı etkinliğinizin düzen dosyasında tanımlayarak veya etkinliğinizin düzen dosyasında bir parça kapsayıcı tanımlayarak ve ardından programlı bir şekilde etkinliğinizin içinden ekleyerek etkinlik görünüm hiyerarşisine ekleyebilirsiniz. Her iki durumda da parçanın etkinliğin görünüm hiyerarşisinde yerleştirilmesi gereken konumu tanımlayan bir FragmentContainerView eklemeniz gerekir. FragmentContainerView, FrameLayout gibi diğer görünüm gruplarının sağlamadığı parçalara özel düzeltmeler içerdiğinden, parçalar için kapsayıcı olarak her zaman bir FragmentContainerView kullanılması önemle tavsiye edilir.

XML yoluyla parça ekle

Etkinlik düzeninizin XML'sine bildirimli olarak bir parça eklemek için FragmentContainerView öğesi kullanın.

Aşağıda, tek bir FragmentContainerView içeren örnek etkinlik düzeni verilmiştir:

<!-- res/layout/example_activity.xml -->
<androidx.fragment.app.FragmentContainerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.example.ExampleFragment" />

android:name özelliği, etkinleştirilecek Fragment sınıf adını belirtir. Etkinliğin düzeni şişirildiğinde, belirtilen parça örneklenir, yeni örneklenen parçada onInflate() çağrılır ve parçayı FragmentManager öğesine eklemek için bir FragmentTransaction oluşturulur.

Programatik olarak parça ekleme

Etkinliğinizin düzenine programatik olarak bir parça eklemek için düzenin, aşağıdaki örnekte gösterildiği gibi parça kapsayıcısı olarak kullanılacak bir FragmentContainerView içermesi gerekir:

<!-- res/layout/example_activity.xml -->
<androidx.fragment.app.FragmentContainerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

XML yaklaşımından farklı olarak android:name özelliği buradaki FragmentContainerView öğesinde kullanılmaz. Bu nedenle, belirli bir parça otomatik olarak oynatılmaz. Bunun yerine, bir parçayı örneklendirmek ve etkinliğin düzenine eklemek için FragmentTransaction kullanılır.

Etkinliğiniz çalışırken parça ekleme, kaldırma veya değiştirme gibi parça işlemleri yapabilirsiniz. FragmentActivity ile bir FragmentTransaction oluşturmak için kullanılabilecek FragmentManager örneğini alabilirsiniz. Ardından, aşağıdaki örnekte gösterildiği gibi, düzeninizdeki kapsayıcının ViewGroup kimliğini ve eklemek ve ardından işlemi gerçekleştirmek istediğiniz parça sınıfını belirterek etkinliğinizin onCreate() yönteminde FragmentTransaction.add() kullanarak parçanızı örnekleyebilirsiniz:

Kotlin

class ExampleActivity : AppCompatActivity(R.layout.example_activity) {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (savedInstanceState == null) {
            supportFragmentManager.commit {
                setReorderingAllowed(true)
                add<ExampleFragment>(R.id.fragment_container_view)
            }
        }
    }
}

Java

public class ExampleActivity extends AppCompatActivity {
    public ExampleActivity() {
        super(R.layout.example_activity);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                .setReorderingAllowed(true)
                .add(R.id.fragment_container_view, ExampleFragment.class, null)
                .commit();
        }
    }
}

Önceki örnekte, parça işleminin yalnızca savedInstanceState değeri null olduğunda oluşturulduğunu unutmayın. Bunun amacı, etkinlik ilk oluşturulduğunda parçanın yalnızca bir kez eklenmesini sağlamaktır. Bir yapılandırma değişikliği gerçekleştiğinde ve etkinlik yeniden oluşturulduğunda savedInstanceState artık null olmaz ve parça, savedInstanceState öğesinden otomatik olarak geri yüklendiği için parçanın ikinci bir kez eklenmesi gerekmez.

Parçanız bazı başlangıç verileri gerektiriyorsa aşağıda gösterildiği gibi FragmentTransaction.add() çağrısında bir Bundle sağlayarak parçanıza bağımsız değişkenler aktarılabilir:

Kotlin

class ExampleActivity : AppCompatActivity(R.layout.example_activity) {
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (savedInstanceState == null) {
            val bundle = bundleOf("some_int" to 0)
            supportFragmentManager.commit {
                setReorderingAllowed(true)
                add<ExampleFragment>(R.id.fragment_container_view, args = bundle)
            }
        }
    }
}

Java

public class ExampleActivity extends AppCompatActivity {
    public ExampleActivity() {
        super(R.layout.example_activity);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState == null) {
            Bundle bundle = new Bundle();
            bundle.putInt("some_int", 0);

            getSupportFragmentManager().beginTransaction()
                .setReorderingAllowed(true)
                .add(R.id.fragment_container_view, ExampleFragment.class, bundle)
                .commit();
        }
    }
}

Daha sonra Bundle bağımsız değişkenleri, requireArguments() çağrısı yapılarak parçanızın içinden alınabilir ve her bağımsız değişkeni almak için uygun Bundle alıcı yöntemleri kullanılabilir.

Kotlin

class ExampleFragment : Fragment(R.layout.example_fragment) {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        val someInt = requireArguments().getInt("some_int")
        ...
    }
}

Java

class ExampleFragment extends Fragment {
    public ExampleFragment() {
        super(R.layout.example_fragment);
    }

    @Override
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        int someInt = requireArguments().getInt("some_int");
        ...
    }
}

Ayrıca bkz.

Parça işlemleri ve FragmentManager, Parça Yöneticisi kılavuzunda daha ayrıntılı olarak ele alınmıştır.