Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

308
Visualizações
MVVM kotlin comparte datos entre actividades sin usar Intents y SharePreferences

Estoy tratando de pasar datos de la Actividad A a la Actividad B pero sin usar Intent putExtra ni SharePreferences, estoy usando un patrón MVVM en kotlin, así que ahora estoy usando una declaración de objeto como esta

 object SharedData{ var myMovies: ArrayList<Movie>? = null }

Entonces, más adelante en la Actividad A, estoy asignando un valor como este

 val movieList = ArrayList<Movie>() movieList.add(Movie("The Purge")) SharedData.myMovies = movieList

Y luego en la Actividad B recupero este valor por:

 val movieList = ArrayList<Movie>() SharedData.myMovies.let { movieList = it }

Pero soy nuevo en Kotlin y ahora sé que este no es el enfoque correcto. porque el objeto singleton asigna memoria y el GC nunca lo recopila. Así que ahora estoy atrapado aquí. Cualquier orientación o ayuda sería apreciada

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Entonces, si está utilizando el patrón MVVM, es muy sencillo. Use la implementación básica de ViewModel con los componentes de la arquitectura de Android. Vea más de esto en https://developer.android.com/topic/libraries/architecture/

 class MyActivity : AppCompatActivity() { private lateinit var myViewModel: MyViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.my_layout) myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java) myViewModel.myObject.observe(this, Observer { mySharedObject -> //TODO whatever you want to do with your data goes here Log.i("SomeTag", mySharedObject.anyData) }) } } class MyCoachFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) activity?.let { myViewModel = ViewModelProviders.of(it).get(MyViewModel::class.java) } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val myObject = MyObject() // what ever object you need to share between Activities and Fragments, it could be a data class or any object myViewModel.myObject.postValue(myObject) } } class MyViewModel : ViewModel() { var myObject = MutableLiveData<MyObject>() }
over 4 years ago · Santiago Trujillo Relatório

0

Mi sugerencia sería: si desea compartir los datos solo entre dos actividades, debe usar la intención y enviar el contenido como objeto parcelable (array parcelable para su escenario de lista de películas) a la siguiente actividad. Esta sería una implementación limpia.

Pero soy nuevo en Kotlin y ahora sé que este no es el enfoque correcto.

Tampoco es un enfoque incorrecto, se puede usar dependiendo de su caso de uso. Si cumple con todos los escenarios a continuación, puede optar por un enfoque de variable estática. Pero el objeto estático se borrará cuando se elimine la aplicación (ya sea por el usuario o por el sistema)

1.Si el tamaño de los datos almacenados es menor.

2. No es necesario que los datos se conserven al cerrar y reiniciar la aplicación.

3. Los datos se comparten entre muchas actividades.

el objeto singleton asigna memoria y el GC nunca lo recopila

Sí. Es cierto. Las variables estáticas no son elegibles para la recolección de basura. Pero siempre que la impresión de memoria sea muy inferior, está bien usar una variable estática siempre que cumpla con los escenarios mencionados anteriormente.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda