这是我的应用程序的体系结构。
MainActivity 只是将MainFragment加载到其容器中的骨架。
MainFragment 包含一个按钮,单击后会添加MapsFragment。
MapsFragment 加载地图视图。它还将在其顶部显示一个自定义大小的对话框片段,并设置WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
以使该对话框片段为非模态。
如果从onResume内部启动,则MapsFragment mapview可以正常工作。 拖动时,这将非常慢
从Button的onClick启动,或
从onResume启动,延迟至少1ms。
这是我的录像 https://youtu.be/x7hFa4Ny4hM
在11s之前,一切都很好,因为它是从onResume启动的。 12秒后,由于mapview是从onClick启动的,因此它变得非常落后。
如果MapsFragment没有启动对话框片段,则mapview将正常工作。
如果延迟至少1毫秒,则地图会滞后。 请帮忙,因为我已经坚持了3天。 谢谢!
这是我的代码
class MapsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_maps)
supportFragmentManager.beginTransaction()
.add(R.id.fragment_container, MainFragment.newInstance())
.commit()
}
}
// -------------------------
class MainFragment : DialogFragment(), View.OnClickListener {
companion object {
fun newInstance() = MainFragment()
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.main_fragment, container, false)
}
override fun onResume() {
super.onResume()
// if passing 0, 0, map will work fine, if passing at least 1 ms, map will be slow
object : CountDownTimer(0, 0) {
override fun onTick(millisUntilFinished: Long) {
var left = millisUntilFinished / 1000
button2.setText("$left")
}
override fun onFinish() {
activity!!.supportFragmentManager.beginTransaction()
.add(R.id.fragment_container, MapsFragment.newInstance())
.addToBackStack(null)
.commit()
}
}.start()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
button2.setOnClickListener(this)
}
override fun onClick(v: View?) {
activity!!.supportFragmentManager.beginTransaction()
.add(R.id.fragment_container, MapsFragment.newInstance())
.addToBackStack(null)
.commit()
}
}
// -------------------------
class MapsFragment : DialogFragment() {
companion object {
fun newInstance() = MapsFragment()
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.maps_fragment, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
AddCitiesFragment.newInstance().show(activity!!.supportFragmentManager)
}
}