Kotlin Activity'den Fragment'a veri taşımak

Enes Seval

Kilopat
Katılım
3 Haziran 2017
Mesajlar
76
Daha fazla  
Cinsiyet
Erkek
İnternetten film verileri çekip gösterdiğim bir uygulama yapmaya çalışıyorum. Uygulama açıldığında mainactivity içerisinde moviesfragment adında bir fragmentta filmleri listeliyorum, navigation drawer ile de filtreleme işlemi yapmak istiyorum. Amacım navigation drawerdaki butona basıldığında verileri fragmenta göndermek oradan da viewmodel üzerinden verileri filtreleyerek yeniden çekmek. Kodlarımı ve aldığım hatayı ekliyorum.
Mainactivity:

Kod:
val navRight : NavigationView = findViewById(R.id.nav_right)
(navRight.menu.findItem(R.id.filtBut).actionView as Button).run {
this.setOnClickListener {
MoviesFragment().filterMovie(filtQuality,filtGenre,filtRate,filtYear,filtLang)
}
}

Moviesfragment.

Kod:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
activity?.setTitle(R.string.movies)

viewModel = ViewModelProviders.of(this).get(MoviesViewModel::class.java)
viewModel.refreshData(sortMethod)

movieList.layoutManager = LinearLayoutManager(context)
movieList.adapter = movieAdapter.

swipeRefreshLayout.setOnRefreshListener {
movieList.visibility = View.GONE.
movieError.visibility = View.GONE.
movieLoading.visibility = View.GONE.
viewModel.refreshData(sortMethod)
swipeRefreshLayout.isRefreshing = false.
}
}

fun filterMovie(quality : String, genre : String, rate : String, year : String, lang : String){

viewModel.filterMovie(quality, genre, rate, year, lang)

}

Logcat çıktısı:

Kod:
2020-06-10 23:29:46.474 18721-18721/com.enesseval.moviedeneme E/AndroidRuntime: FATAL EXCEPTION: main.
Process: com.enesseval.moviedeneme, PID: 18721.
kotlin.UninitializedPropertyAccessException: lateinit property viewModel has not been initialized.
at com.enesseval.moviedeneme.view.MoviesFragment.filterMovie(MoviesFragment.kt:110)
at com.enesseval.moviedeneme.view.MainActivity$onCreate$$inlined$run$lambda$6.onClick(MainActivity.kt:87)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2020-06-10 23:29:46.488 18721-18721/com.enesseval.moviedeneme I/Process: Sending signal. PID: 18721 SIG: 9
 
Son düzenleyen: Moderatör:
Tam emin değilim ama ViewModeli class olarak düzenleyip tekrar yazarmısınız.Anladığım kadarıyla Initialize etmeye çalışıyor ve bunu yapamıyor.Belki işinize yarar fikir verir şu konuya göz atınız.
 
Zaten class da ben uzamasın diye o kadarlık yeri attım eğer dediğiniz doğru anladıysam
 
Yanlış anlamayın biliyorum ama öyle tek seferde doğru cevabı bulacak kadar değil .Bir deneyiniz olmazsa başka yollarada bakalım
Sıkıntı yok bende çok yeniyim başka sıkıntılar da yaşadım stackoverflowdan falan çözdüm de bu beni baya zorladı 4 gündür kısmen bakınıyorum ama 1 adım dahi atamadım
 
Sıkıntı yok bende çok yeniyim başka sıkıntılar da yaşadım stackoverflowdan falan çözdüm de bu beni bayağı zorladı 4 gündür kısmen bakınıyorum ama 1 adım dahi atamadım

Konuya çok boş yazı yazmayalım .Eğer olmazsa Discord kullanıyor iseniz lütfen bana ulaşınız.
Discord: Kdr8070#6916.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…