مدیریت حالت WebView

نماد امتیاز سه ستاره

WebView یک کامپوننت رایج است که سیستم پیشرفته‌ای برای مدیریت وضعیت (state management) ارائه می‌دهد. یک WebView باید وضعیت (state) و موقعیت اسکرول (scroll position) خود را در طول تغییرات پیکربندی حفظ کند. یک WebView می‌تواند موقعیت اسکرول خود را هنگامی که کاربر دستگاه را می‌چرخاند یا یک تلفن تاشو را باز می‌کند، از دست بدهد، که این امر کاربر را مجبور می‌کند دوباره از بالای WebView به موقعیت اسکرول قبلی اسکرول کند.

بهترین شیوه‌ها

تعداد دفعاتی که یک WebView دوباره ساخته می‌شود را به حداقل برسانید. WebView در مدیریت وضعیت خود خوب عمل می‌کند و شما می‌توانید با مدیریت هرچه بیشتر تغییرات پیکربندی، از این ویژگی بهره ببرید. برنامه شما باید تغییرات پیکربندی را مدیریت کند زیرا Activity recreation (روش سیستم برای مدیریت تغییرات پیکربندی) WebView را نیز دوباره می‌سازد، که باعث می‌شود WebView وضعیت خود را از دست بدهد.

مواد لازم

  • android:configChanges : ویژگی عنصر <activity> در manifest. تغییرات پیکربندی مدیریت‌شده توسط activity را فهرست می‌کند.
  • View#invalidate() : متدی که باعث می‌شود یک نما (view) دوباره ترسیم شود. این متد توسط WebView به ارث رسیده است.

مراحل

برای ذخیره وضعیت WebView ، تا حد امکان از بازآفرینی Activity خودداری کنید و سپس اجازه دهید WebView نامعتبر شود تا بتواند ضمن حفظ وضعیت خود، تغییر اندازه دهد.

۱. تغییرات پیکربندی را به AndroidManifest.xml اضافه کنید

با مشخص کردن تغییرات پیکربندی که توسط برنامه شما (و نه توسط سیستم) انجام می‌شود، از بازآفرینی فعالیت‌ها جلوگیری کنید:

<activity
  android:name=".MyActivity"
  android:configChanges="screenLayout|orientation|screenSize
      |keyboard|keyboardHidden|smallestScreenSize" />

۲. غیرفعال کردن WebView در تغییرات پیکربندی

کاتلین

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    webView.invalidate()
}

جاوا

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    webview.invalidate();
}

این مرحله فقط برای سیستم نمایش اعمال می‌شود، زیرا Jetpack Compose برای تغییر اندازه صحیح عناصر Composable نیازی به نامعتبر کردن چیزی ندارد. با این حال، Compose اغلب اگر به درستی مدیریت نشود، یک WebView را از نو می‌سازد. از بسته‌بندی Accompanist WebView برای ذخیره و بازیابی وضعیت WebView در برنامه‌های Compose خود استفاده کنید.

نتایج

اجزای WebView برنامه شما اکنون وضعیت و موقعیت پیمایش خود را در تغییرات پیکربندی متعدد، از تغییر اندازه گرفته تا تغییر جهت و تا کردن و باز کردن، حفظ می‌کنند.

منابع اضافی

برای کسب اطلاعات بیشتر در مورد تغییرات پیکربندی و نحوه مدیریت آنها، به مدیریت تغییرات پیکربندی مراجعه کنید.