использовать androidx.fragment.app.Fragment found Я обнаружил, что не могу инициализировать initAdapter () в initView (). Почему? - PullRequest
0 голосов
/ 21 октября 2019

Код с использованием kotlin, во-первых, это мой код ошибки.

это мой используемый расширение BaseFragment

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val cacheView = mView == null
        if (cacheView) {
            mView = inflater.inflate(getFragLayoutResID(), container, false)
            initView(mView!!)
        }
        return mView
    }

    //When used in an activity
    fun addFragment(context: FragmentActivity, fragmentContainer: Int) {
        val fragmentManager = context.supportFragmentManager
        val ft = fragmentManager.beginTransaction()
        ft.replace(fragmentContainer, this, javaClass.simpleName).addToBackStack(javaClass.simpleName)
            .commitAllowingStateLoss()
        ft.setMaxLifecycle(this, Lifecycle.State.RESUMED)
    }

это мой HomeActivity

homeVideoFragment.addFragment(mContext as FragmentActivity, mainFrameLayout.id)

этомой HomeFragment

    //HomeFragment
    override fun initView(view: View) {//this is my homeFragment
        initAdapter()
        //init()
    }

    private var homeVideoAdapter: HomeVideoAdapter? = null
    private fun initAdapter() {//this is my init adapter
        val homeVideoManager = LinearLayoutManager(mContext, RecyclerView.VERTICAL, false)
        homeVideoAdapter = HomeVideoAdapter(mContext!!)
        home_video_rv.layoutManager = homeVideoManager
        home_video_rv.adapter = homeVideoAdapter
    }

    private fun init() = runBlocking {
        GlobalScope.launch(Dispatchers.Main) {
            initAdapter()
            //GlobalScope.async(Dispatchers.IO) {
            //presenter!!.getVideoClassPost(AllPort.POST_GET_VIDEO_HOME)//network requests
            //}.await()
        }
    }

Когда код выполняется следующим образом, он сообщает об ошибке: home_video_rv не должен быть нулевым.

Но когда я использую init (), он работает нормально.

Хотя успешно, но не может делать сетевые запросы.

Почему возникает эта проблема?

1 Ответ

1 голос
/ 21 октября 2019

Использовать метод onViewCreated

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            val cacheView = mView == null
            if (cacheView) {
                mView = inflater.inflate(getFragLayoutResID(), container, false)
            }
            return mView
        }

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        initView(view)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...