Parça oluşturma

Parça, kullanıcının modüler bir bölümünü temsil eder bir etkinlikteki arayüze ait. Bir parçanın kendi yaşam döngüsü vardır ve kullanabilirsiniz ve şunu içeren bir dosya oluştururken parçaları ekleyip kaldırabilirsiniz: çalışıyor.

Bu dokümanda, 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 bir projenin AndroidX Parça kitaplığı. Şunları yapmanız gerekir: Google Maven deposunu ekleyin projenizin settings.gradle dosyasına ekleyin.

Eski

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

Kotlin

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

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

Modern

dependencies {
    def fragment_version = "1.8.2"

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

Kotlin

dependencies {
    val fragment_version = "1.8.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

Parça oluşturmak için AndroidX'i genişletin Fragment sınıf ve geçersiz kılma oluşturmaya benzer şekilde, uygulama mantığınızı ekleme yöntemleri Activity sınıfı. Minimum düzeyde kendi düzenini tanımlayan parça, parçanızın düzen kaynağını sağlayın ekleyin:

Kotlin

class ExampleFragment : Fragment(R.layout.example_fragment)

Java

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

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

DialogFragment
Kayan iletişim kutusu gösterir. Diyalog oluşturmak için bu sınıfı kullanmak, diyalog yardımcısı yöntemlerini Parçalar olarak Activity sınıfı Dialog öğesinin oluşturulması ve temizlenmesi otomatik olarak yapılır. DialogFragment ile iletişim kutularını görüntüleme konusuna bakın inceleyebilirsiniz.
PreferenceFragmentCompat
Şunların hiyerarşisini görüntüler: olarak Preference nesne liste'ye dokunun. PreferenceFragmentCompat ile yapabilecekleriniz: Uygulamanız için ayarlar ekranı oluşturun.

Etkinliğe parça ekleme

Genel olarak, parçanız bir AndroidX içine yerleştirilmiş olmalıdır FragmentActivity - kullanıcı arayüzünün bir kısmını bu etkinliğin düzenine katkıda bulun. FragmentActivity. şunun için temel sınıftır: AppCompatActivity, Bu nedenle, geriye dönük veriler sağlamak için zaten AppCompatActivity alt sınıfına giriyorsanız uyumlu hale getirmek için etkinliğinizi değiştirmenize gerek yoktur. temel sınıf.

Parçanızı etkinliğin görünüm hiyerarşisine etkinliğinizin düzen dosyasında tanımlamak veya bir parça kapsayıcıyı etkinleştirdikten sonra, parçasını etkinliğiniz içinden programatik olarak eklemeniz gerekir. Her iki durumda da eklemek için FragmentContainerView parçasının görünüm hiyerarşisini inceleyebilirsiniz. Optimum kampanya performansı için her zaman FragmentContainerView, parçalar için kapsayıcı olarak FragmentContainerView, diğer parçalara özel düzeltmeler içerir: FrameLayout gibi görüntüleme grupları sağlamaz.

XML aracılığıyla parça ekle

Etkinlik düzeninizin XML'sine bildirimli bir şekilde parça eklemek için FragmentContainerView öğesi.

Burada, tek bir FragmentContainerView:

<!-- 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, Fragment öğesinin sınıf adını belirtir örneklendiririz. Etkinliğin düzeni şişirildiğinde, belirtilen parça örneklendirildiğinde onInflate() yeni örneklenen parçada çağrılır ve bir FragmentTransaction öğesi, parçayı FragmentManager öğesine eklemek için oluşturulur.

Programatik olarak parça ekleme

Etkinliğinizin düzenine programlı bir şekilde bir parça eklemek için düzen parça kapsayıcısı olarak kullanılacak bir FragmentContainerView içermelidir, aşağıdaki örnekte gösterildiği gibi:

<!-- 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 Burada FragmentContainerView olduğundan belirli bir parça otomatik olarak bir örneğidir. Bunun yerine FragmentTransaction bir parçayı örneklendirmek ve etkinliğin düzenine eklemek için kullanılır.

Etkinliğiniz çalışırken, şu gibi parça işlemleri yapabilirsiniz: bir parçanın eklenmesi, kaldırılması veya değiştirilmesi. FragmentActivity uygulamasında şunları yapabilirsiniz: şunun bir örneğini al: FragmentManager, FragmentTransaction oluşturmak için kullanılabilir. Daha sonra, ortak çalışma işlemini kullanarak etkinliğinizin onCreate() yöntemi içinde FragmentTransaction.add(), düzeninizdeki kapsayıcının ViewGroup kimliğini ve aşağıdaki örnekte gösterildiği gibi, eklemek istediğiniz sınıfı ve ardından işlemi gerçekleştirin: şu örneği inceleyin:

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();
        }
    }
}

Yukarıdaki örnekte, parça işlemin yalnızca savedInstanceState null olduğunda. Bu, parçanın doğru şekilde etkinlik ilk oluşturulduğunda yalnızca bir kez eklenir. Bir yapılandırma değişikliği gerçekleşirse ve etkinlik yeniden oluşturulursa savedInstanceState artık null değil ve parçanın bunu yapması gerekmiyor parça otomatik olarak geri yüklendiğinde ikinci bir kez eklenir. savedInstanceState arasında.

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

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, parçanızın içinden arama requireArguments(), Ayrıca, verilerinizi almak için uygun Bundle her bağımsız değişkeni kullanın.

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 daha ayrıntılı olarak ele alınmıştır Parça yöneticisi kılavuzunda bulabilirsiniz.