Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Kotlin的片段中的runOnUiThread()方法_Android_Kotlin - Fatal编程技术网

Android 使用Kotlin的片段中的runOnUiThread()方法

Android 使用Kotlin的片段中的runOnUiThread()方法,android,kotlin,Android,Kotlin,如何在fragment中使用runOnUiThread。如何在片段中完成它 下面是在活动中执行此操作的代码 this@MainActivity.runOnUiThread(java.lang.Runnable { progressBar.visibility = View.GONE }) 如果要在片段内部使用runOnUiThread()internal fragment,则需要使用Activitycontext 示例代码 class MyFragment : Fragment()

如何在
fragment
中使用
runOnUiThread
。如何在片段中完成它

下面是在活动中执行此操作的代码

this@MainActivity.runOnUiThread(java.lang.Runnable {
    progressBar.visibility = View.GONE
})

如果要在片段内部使用
runOnUiThread()
internal fragment,则需要使用
Activity
context

示例代码

  class MyFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment

        activity?.runOnUiThread {
            progressBar.visibility = View.GONE
        }
        return inflater.inflate(R.layout.fragment_layout, container, false)
    }


}
class DepositFragment : Fragment() {

    lateinit var rootView: View
    lateinit var mContext: Context

    override fun onAttach(context: Context) {
        super.onAttach(context)
        mContext = context
    }
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        (mContext as Activity).runOnUiThread { 

        }
        return inflater.inflate(R.layout.fragment_deposit, container, false)
    }
}
示例代码

  class MyFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment

        activity?.runOnUiThread {
            progressBar.visibility = View.GONE
        }
        return inflater.inflate(R.layout.fragment_layout, container, false)
    }


}
class DepositFragment : Fragment() {

    lateinit var rootView: View
    lateinit var mContext: Context

    override fun onAttach(context: Context) {
        super.onAttach(context)
        mContext = context
    }
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        (mContext as Activity).runOnUiThread { 

        }
        return inflater.inflate(R.layout.fragment_deposit, container, false)
    }
}

如果要在片段内部使用
runOnUiThread()
internal fragment,则需要使用
Activity
context

示例代码

  class MyFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment

        activity?.runOnUiThread {
            progressBar.visibility = View.GONE
        }
        return inflater.inflate(R.layout.fragment_layout, container, false)
    }


}
class DepositFragment : Fragment() {

    lateinit var rootView: View
    lateinit var mContext: Context

    override fun onAttach(context: Context) {
        super.onAttach(context)
        mContext = context
    }
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        (mContext as Activity).runOnUiThread { 

        }
        return inflater.inflate(R.layout.fragment_deposit, container, false)
    }
}
示例代码

  class MyFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment

        activity?.runOnUiThread {
            progressBar.visibility = View.GONE
        }
        return inflater.inflate(R.layout.fragment_layout, container, false)
    }


}
class DepositFragment : Fragment() {

    lateinit var rootView: View
    lateinit var mContext: Context

    override fun onAttach(context: Context) {
        super.onAttach(context)
        mContext = context
    }
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        (mContext as Activity).runOnUiThread { 

        }
        return inflater.inflate(R.layout.fragment_deposit, container, false)
    }
}

runOnUiThread方法可以做两件事

  • 它检查当前线程

  • 如果当前线程是主线程,它会立即执行任务,否则它会将任务提交给活动处理程序

  • 我认为,最好的解决方案应该是:

  • 显式创建新处理程序的步骤

  • 将任务发布到新处理程序

  • Smth是这样的:

    private val handler = Handler(Looper.getMainLooper())
    ...
    handler.post {
    ...your task...
    }
    

    RunNuithRead方法有两个功能

  • 它检查当前线程

  • 如果当前线程是主线程,它会立即执行任务,否则它会将任务提交给活动处理程序

  • 我认为,最好的解决方案应该是:

  • 显式创建新处理程序的步骤

  • 将任务发布到新处理程序

  • Smth是这样的:

    private val handler = Handler(Looper.getMainLooper())
    ...
    handler.post {
    ...your task...
    }
    

    这个问题对我来说没有任何意义,因为上面已经说过,片段中的所有调用都将始终在主线程或UI线程上运行。无需为此显式调用@rununuithread。当您从工作线程更新视图时,需要将上下文切换到UI以更新视图。

    这个问题对我来说没有任何意义,如上所述,片段中的所有调用将始终在主线程或UI线程上运行。无需为此显式调用@rununuithread。当您从工作线程更新视图时,需要将上下文切换到UI以更新视图。

    一旦始终在UI线程上调用CreateView,则此runOnUiThread为unnecessary@AlexanderDadukin是的,我知道在ui线程上总是调用CreateView时,这个RunNoUnitRead是unnecessary@AlexanderDadukin是的,我知道