Как ускорить процесс изменения фрагмента в Android - PullRequest
0 голосов
/ 12 мая 2019

ПОЧЕМУ ЛЮБОЙ ЛЮДИ НЕ ПОМОГАЕТ МНЕ ???

В моем приложении я использовал BottomNavBar и NavigationGraph для показа некоторых fragments!
В одном из моих fragments у меня много представлений (fragment макет имеет 1069 строк xml кодов), и когда выберите этот fragment из BottomNavBar, через несколько секунд покажите мне fragment.
Другими словами покажи мне это fragment с задержкой !

Коды фрагментов:

class HomeDashboardFragment : Fragment(), HomeDashboardContracts.View {

    @NonNull
    private var pageTitle: TextView? = null
    @NonNull
    private var menuIcon: TextView? = null
    private lateinit var token: String
    private lateinit var presenter: HomeDashboardPresenterImpl
    private var giftExpireSplit: List<String> = emptyList()
    private var giftExpireDate: List<String> = emptyList()
    private var timeUtils: TimeUtils? = null
    @NonNull
    private var disposable: Disposable? = null

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_home_dashboard, container, false)
    }

    @SuppressLint("WrongConstant")
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        //Initialize
        presenter = HomeDashboardPresenterImpl(requireContext(), this)
        //Initialize views from activity
        activity?.let { itActivity ->
            pageTitle = itActivity.findViewById(R.id.toolbarMain_title)
            menuIcon = itActivity.findViewById(R.id.toolbarMain_menuIcon)
            //Set title
            pageTitle?.let { itTitle ->
                itTitle.text = getString(R.string.menuHomeDashboard)
            }
            //Open menu
            menuIcon?.let { itMenu ->
                itMenu.setOnClickListener {
                    itActivity.findViewById<AwesomeDrawerLayout>(R.id.homePage_drawerLayout).openDrawer(Gravity.END)
                }
            }
            //Get token
            token = GoodPrefs.getInstance().getString(PrefsKey.USER_JWT_TOKEN.name, "")
            //User registered
            if (GoodPrefs.getInstance().isKeyExists(PrefsKey.USER_JWT_TOKEN.name)) {
                menuIcon?.visibility = View.VISIBLE
            }
            //Set layout
            presenter.checkRegisterUser(token)
            //Load profile data
            if (!isEmptyString(token)) {
                presenter.getProfile(token, USER_NOTIF_ID)
            }
        }
    }

MainActivity коды для набора fragments в BottomNavBar с NavigationGraph:

private fun setupNavigation() {
    val navController = Navigation.findNavController(this, R.id.homePage_fragmentNavHost)
    NavigationUI.setupWithNavController(homePage_bottomNavBar, navController)
}

override fun onSupportNavigateUp() = Navigation.findNavController(this, R.id.homePage_fragmentNavHost).navigateUp()

Как я могу исправить эту проблему?

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Вы можете добавить макет манекена, состоящий из одной viewGroup.Затем в методе onViewCreated надуйте реальный макет.Например:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) =
       inflater.inflate(R.layout.layout_dummy, container, false);

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        Handler().post {
            val layout = flContainer
            val child = layoutInflater.inflate(R.layout.fragment_real, null)
            layout.removeAllViews()
            layout.addView(child)

            setupToolbar()
            setupWebView()
        }
    }


layout_dummy.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
        android:id="@+id/flContainer"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

</FrameLayout>
0 голосов
/ 15 мая 2019

Ваша проблема почти наверняка вызвана вашим массивным XML-файлом. Загрузка всех этих просмотров занимает время. У вас много вложений, которые замедляют работу.

Вы должны оптимизировать свой макет. Уберите вещи, которые вам не нужны. Замените столько вложенных LinearLayout, сколько вы можете с ConstraintLayout. Возможно, используйте RecyclerView, если он предназначен для длинного прокручиваемого представления.

Надеюсь, это поможет.

...