یک قطعه بخش مدولار رابط کاربری را در یک فعالیت نشان می دهد. یک قطعه چرخه حیات خود را دارد، رویدادهای ورودی خود را دریافت میکند، و میتوانید در حین اجرای فعالیت حاوی قطعهها را اضافه یا حذف کنید.
این سند نحوه ایجاد یک قطعه و گنجاندن آن در یک فعالیت را توضیح می دهد.
محیط خود را تنظیم کنید
قطعات نیاز به وابستگی به کتابخانه قطعه AndroidX دارند. برای درج این وابستگی، باید مخزن Google Maven را به فایل settings.gradle
پروژه خود اضافه کنید.
شیار
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() ... } }
کاتلین
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() ... } }
برای گنجاندن کتابخانه AndroidX Fragment به پروژه خود، وابستگی های زیر را در فایل build.gradle
برنامه خود اضافه کنید:
Groovy
dependencies { def fragment_version = "1.8.5" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.5" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") }
یک کلاس قطعه ایجاد کنید
برای ایجاد یک قطعه، کلاس AndroidX Fragment
را گسترش دهید و روشهای آن را برای درج منطق برنامه خود لغو کنید، مشابه روشی که یک کلاس Activity
ایجاد میکنید. برای ایجاد یک فرگمنت مینیمال که چیدمان خود را تعریف می کند، همانطور که در مثال زیر نشان داده شده است، منبع طرح بندی قطعه خود را در اختیار سازنده پایه قرار دهید:
کاتلین
class ExampleFragment : Fragment(R.layout.example_fragment)
جاوا
class ExampleFragment extends Fragment { public ExampleFragment() { super(R.layout.example_fragment); } }
کتابخانه Fragment همچنین کلاس های پایه قطعه تخصصی تری را ارائه می دهد:
-
DialogFragment
- یک گفتگوی شناور را نمایش می دهد. استفاده از این کلاس برای ایجاد دیالوگ جایگزین خوبی برای استفاده از روش های کمکی گفتگو در کلاس
Activity
است، زیرا قطعات به طور خودکار ایجاد و پاکسازیDialog
را انجام می دهند. برای جزئیات بیشتر به نمایش دیالوگ ها باDialogFragment
مراجعه کنید. -
PreferenceFragmentCompat
- سلسله مراتبی از اشیاء
Preference
را به صورت لیست نمایش می دهد. می توانید ازPreferenceFragmentCompat
برای ایجاد صفحه تنظیمات برای برنامه خود استفاده کنید.
یک قطعه به یک فعالیت اضافه کنید
به طور کلی، قطعه شما باید در یک AndroidX FragmentActivity
تعبیه شود تا بخشی از UI به طرحبندی آن فعالیت کمک کند. 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
کانتینر را در طرحبندی خود و کلاس قطعهای را که میخواهید اضافه کنید ارسال کنید و سپس تراکنش را انجام دهید، همانطور که در نشان داده شده است. مثال زیر:
کاتلین
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) } } } }
جاوا
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()
به قطعه شما ارسال کرد، همانطور که در زیر نشان داده شده است:
کاتلین
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) } } } }
جاوا
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()
از درون قطعهتان بازیابی کرد و از روشهای مناسب Bundle
getter برای بازیابی هر آرگومان استفاده کرد.
کاتلین
class ExampleFragment : Fragment(R.layout.example_fragment) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { val someInt = requireArguments().getInt("some_int") ... } }
جاوا
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"); ... } }
همچنین ببینید
تراکنشهای Fragment و FragmentManager
با جزئیات بیشتری در راهنمای مدیر Fragment پوشش داده شدهاند.