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.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
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ı kullanmakActivity
sınıfındaki iletişim yardımcısı yöntemlerini kullanmaya uygun bir alternatiftir. Daha fazla bilgi içinDialogFragment
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.