يمثّل الجزء جزءًا معياريًا من المستخدم. واجهة ضمن نشاط ما. للجزء دورة حياة خاصة به، ويتلقى أحداث الإدخال الخاصة، ويمكنك إضافة أو إزالة الأجزاء أثناء كتابة النشاط قيد التشغيل.
يصف هذا المستند كيفية إنشاء جزء وتضمينه في نشاط.
إعداد البيئة
يجب أن تعتمد الأجزاء تبعية على
مكتبة جزء من AndroidX. عليك إجراء ما يلي:
وأضف مستودع Google Maven
إلى ملف settings.gradle
الخاص بمشروعك لتضمين هذه التبعية.
Groovy
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() ... } }
Kotlin
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() ... } }
لتضمين مكتبة AndroidX Fragment في مشروعك، عليك إضافة ما يلي
الاعتمادية في ملف build.gradle
لتطبيقك:
Groovy
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") }
إنشاء فئة للأجزاء
ولإنشاء كسر، عليك بتوسيع AndroidX
صف واحد (Fragment
) وإلغاء
وأساليبها لإدراج منطق تطبيقك، على غرار الطريقة التي ستنشئ بها
صف Activity
. لإنشاء الحد الأدنى
يحدد التنسيق الخاص به، قدِّم مورد تصميم الجزء
إلى الدالة الإنشائية الأساسية، كما هو موضح في المثال التالي:
Kotlin
class ExampleFragment : Fragment(R.layout.example_fragment)
Java
class ExampleFragment extends Fragment { public ExampleFragment() { super(R.layout.example_fragment); } }
توفر مكتبة Fragment أيضًا فئات أساسية أكثر تخصصًا للأجزاء:
DialogFragment
- عرض مربّع حوار عائم من المفيد استخدام هذا الصف لإنشاء مربع حوار
بدلاً من استخدام طرق المساعدة الخاصة بمربعات الحوار في
الفئة
Activity
، كأجزاء معالجة إنشاءDialog
وتنظيفها تلقائيًا. راجِع عرض مربّعات الحوار معDialogFragment
. للاطّلاع على مزيد من التفاصيل PreferenceFragmentCompat
- عرض تسلسلاً هرميًا
كائنات
Preference
كـ الحالية. يمكنك استخدامPreferenceFragmentCompat
من أجل إنشاء شاشة إعدادات لتطبيقك
إضافة جزء إلى نشاط
بشكل عام، يجب تضمين الجزء في AndroidX
FragmentActivity
إلى
جزءًا من واجهة المستخدم في تخطيط هذا النشاط. FragmentActivity
هي الفئة الأساسية
AppCompatActivity
,
لذا، إذا كنت تصنف AppCompatActivity
ضمن فئات فرعية لتقديم
في تطبيقك، فلن تحتاج إلى تغيير نشاطك
الفئة الأساسية.
يمكنك إضافة الجزء إلى التدرّج الهرمي لطريقة عرض النشاط إما عن طريق
أو تحديد الجزء في ملف تخطيط النشاط أو من خلال تحديد
حاوية تجزئة في ملف تخطيط النشاط، ثم
إضافة الجزء آليًا من داخل نشاطك في كلتا الحالتين، تحتاج إلى
لإضافة
FragmentContainerView
الذي يحدد الموقع الذي ينبغي وضع الجزء فيه داخل
العرض الهرمي لعرض النشاط. ويُنصح بشدة باستخدام
FragmentContainerView
باعتبارها حاوية للأجزاء، مثل
يتضمن FragmentContainerView
إصلاحات خاصة بالأجزاء التي غير ذلك
لا تقدِّمها مجموعات طرق العرض مثل FrameLayout
.
إضافة جزء باستخدام XML
لإضافة جزء بشكل صريح إلى ملف XML الخاص بتنسيق النشاط، استخدِم
العنصر FragmentContainerView
.
في ما يلي مثال على تخطيط نشاط يتضمّن
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
اسم فئة Fragment
إلى
إنشاء مثيل. عندما يتم تضخيم تنسيق النشاط، فإن الجزء المحدد
يتم إنشاء مثيل له،
onInflate()
على الجزء الذي تم إنشاء مثيل له حديثًا، وFragmentTransaction
لإضافة الجزء إلى FragmentManager
.
إضافة جزء آليًا
لإضافة جزء آليًا إلى تنسيق نشاطك، يجب أن يكون
العلامة 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" />
على عكس أسلوب XML، لا يتم استخدام السمة android:name
في
FragmentContainerView
هنا، لذلك لا يتم إنشاء جزء معين تلقائيًا
إنشاء مثيل. بدلاً من ذلك،
FragmentTransaction
يُستخدم لإنشاء مثيل جزء وإضافته إلى تخطيط النشاط.
أثناء تشغيل نشاطك، يمكنك إجراء معاملات مجزأة مثل
إضافة جزء أو إزالته أو استبداله. في FragmentActivity
، يمكنك
الحصول على مثال
FragmentManager
، التي
لإنشاء FragmentTransaction
. بعد ذلك، يمكنك إنشاء مثيل
في طريقة onCreate()
لنشاطك باستخدام
FragmentTransaction.add()
,
إدخال المعرّف ViewGroup
للحاوية في التنسيق والجزء
التي تريد إضافتها ثم تنفيذ المعاملة كما هو موضح في
المثال التالي:
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(); } } }
في المثال السابق، لاحظ أنه يتم إنشاء معاملة التجزئة فقط
عندما تكون قيمة الحقل "savedInstanceState
" هي null
. وذلك للتأكد من أن الجزء
تُضاف مرة واحدة فقط عند إنشاء النشاط لأول مرة. عندما
حدوث تغيير في التهيئة وإعادة إنشاء النشاط،
لم يعد savedInstanceState
null
، ولا يحتاج الجزء
لإضافته للمرة الثانية، إذ تتم استعادة الجزء تلقائيًا
من savedInstanceState
.
إذا كان الكسر يتطلب بعض البيانات الأولية، يمكن تمرير الوسيطات إلى الكسر من خلال توفير Bundle
في استدعاء الدالة FragmentTransaction.add()
، كما هو موضّح أدناه:
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(); } } }
ويمكن بعد ذلك استرداد الوسيطات Bundle
من داخل الجزء باستخدام
يتصل
requireArguments()
,
ويمكن استخدام طرق getter المناسبة بـ Bundle
لاسترداد
لكل وسيطة.
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"); ... } }
انظر أيضًا
تم تناول المعاملات الجزئية وFragmentManager
بمزيد من التفاصيل.
في دليل مدير التجزئة.