0

WHY NOT ANY PEOPLE HELP TO ME???

In my application I used BottomNavBar and NavigationGraph for show some fragments!
In one of my fragments I have many views (fragment layout has 1069 lines xml codes) and when select this fragment from BottomNavBar, after some second show me this fragment.
In the other words show me this fragment with delay!

Fragment codes:

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 codes for set fragments into BottomNavBar with 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()

How can i fix this issue?

4

2 回答 2

2

您可以添加由单个 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>
于 2019-05-14T14:53:57.050 回答
1

您的问题几乎肯定是由您的大量 XML 文件引起的。加载所有这些视图需要时间。你有很多嵌套会减慢速度。

你必须优化你的布局。删除不需要的东西。用 ConstraintLayout 替换尽可能多的嵌套 LinearLayout。如果这是一个长的滚动视图,也许可以使用 RecyclerView。

希望有帮助。

于 2019-05-15T05:23:28.670 回答