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:
Eski
dependencies { def fragment_version = "1.8.3" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.3" // 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.