LiveData不显示有关配置更改的数据

时间:2019-02-16 11:03:22

标签: android android-fragments kotlin android-architecture-components android-livedata

我有搜索片段,可以在其中进行API调用。它返回LiveData。每当我旋转手机,弹出键盘时,我都会丢失数据,但LiveData仍然有数据(我通过关闭Wi-Fi进行了检查)。我认为我在错误的地方观察。我该如何解决?      MusicSearchListFragment:

class MusicSearchListFragment : ScopedFragment(), KodeinAware, SearchView.OnQueryTextListener {
override val kodein by closestKodein()
private val searchViewModelFactory: MusicSearchListViewModelFactory by instance()
lateinit var progressBar: ProgressBar
private lateinit var viewModel: MusicSearchListViewModel
private var recyclerView: RecyclerView? = null
private val resId = R.anim.layout_animation_waterfall
override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {

    val rootView = inflater.inflate(R.layout.search_fragment, container, false)
    viewModel = ViewModelProviders.of(this, searchViewModelFactory).get(MusicSearchListViewModel::class.java)
    progressBar = rootView.findViewById(R.id.loading_progressbar_search)
    progressBar.visibility = View.GONE

    recyclerView = rootView.findViewById(R.id.search_recycler_view) as? RecyclerView
    recyclerView!!.layoutManager = LinearLayoutManager(context)

    return rootView
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    (activity as AppCompatActivity).supportActionBar?.hide()


    search_toolbar.apply {
        setIconifiedByDefault(false)
        requestFocus()
        setOnQueryTextListener(this@MusicSearchListFragment)
        isIconified = false
        requestFocusFromTouch()

    }
}

override fun onQueryTextChange(newText: String?): Boolean {
    return true
}

override fun onQueryTextSubmit(query: String?): Boolean {
    Log.d("myLog", "Make Retrofit Call")
    progressBar.visibility = View.VISIBLE
    launch(Dispatchers.Main) {
        if (query != null) {
            val searchedTracks = viewModel.searchTracks(query)
            searchedTracks.observe(this@MusicSearchListFragment, Observer {
                if (it == null) return@Observer
                progressBar.visibility = View.GONE
                val adapter = MusicSearchListAdapter(
                    this@MusicSearchListFragment,
                    it.message.body.trackList
                )
                val animation: LayoutAnimationController = AnimationUtils.loadLayoutAnimation(context, resId)
                recyclerView!!.layoutAnimation = animation
                recyclerView!!.adapter = adapter
            })
        } else Toast.makeText(context, "No Internet Connection", Toast.LENGTH_SHORT).show()

    }
    return false
}
}

0 个答案:

没有答案