Вот архитектура моего приложения.
MainActivity - это просто скелет, который загружает MainFragment в свой контейнер.
MainFragment содержит кнопку и при нажатии добавляет MapsFragment.
MapsFragment загружает вид карты. Он также покажет фрагмент диалога нестандартного размера поверх него с WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
, установленным, чтобы сделать этот фрагмент диалога немодальным.
MapsFragment mapview будет работать нормально, если он запускается изнутри onResume.
Принимая во внимание, что это будет очень медленно при перетаскивании, если это
Запускается с помощью кнопки onClick или
Запускается из onResume с задержкой не менее 1 мс.
Вот моя видеозапись
https://youtu.be/x7hFa4Ny4hM
До 11s все работало нормально, так как запускается из onResume.
После 12 с просмотр карты становится очень медленным, потому что он запускается из onClick.
Если MapsFragment не запускает фрагмент диалога, то просмотр карты будет работать нормально.
Кажется, если есть задержка по крайней мере на 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)
}
}