Ich möchte die Nachrüstantwort an Activity übergeben, damit ich Daten im Recyclerview-Adapter einstellen kann. Ich möchte LiveData oder RxJava nicht verwenden. Hier ImageDetails ist die Liste der Json Object und ich möchte es an MainActivity übergeben.Wie wird die Nachrüstung von onResponse-Daten an eine Aktivität übergeben?
TrendingViewModel.kt
class TrendingViewModel : ViewModel() {
fun fetchGifs() {
val apiService = GiphyApi().getClient()?.create(ApiInterface::class.java)
val call = apiService?.getTrendingResults(20, Constants.API_KEY)
var imageDetails: List<ImageDetails>
call?.enqueue(object : retrofit2.Callback<GiphyResponse> {
override fun onResponse(call: Call<GiphyResponse>?, response: Response<GiphyResponse>?) {
imageDetails = response?.body()?.data!!
}
override fun onFailure(call: Call<GiphyResponse>?, t: Throwable?) {
}
})
}}
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var layoutManager: RecyclerView.LayoutManager
lateinit var adapter: RecyclerViewAdapter
lateinit var trendingViewModel: TrendingViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val debugTree: Timber.DebugTree = Timber.DebugTree()
TrendingViewModel().fetchGifs()
Timber.plant(debugTree)
trendingViewModel = ViewModelProviders.of(this).get(TrendingViewModel::class.java)
trendingViewModel.fetchGifs()
layoutManager = GridLayoutManager(this, 3) as RecyclerView.LayoutManager
binding.recyclerview.layoutManager = layoutManager
adapter = RecyclerViewAdapter(this)
binding.recyclerview.adapter = adapter
adapter.setListData(//TODO I need the response data here)
}}
RecyclerViewAdapter.kt
Edit: Everthing arbeitet gut, aber meine Liste wird immer aktualisiert, nachdem Alle Standardeinstellungen Funktion wird aufgerufen.
class RecyclerViewAdapter(context: Context) : RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>(){
private var gifList: List<ImageDetails>? = Collections.emptyList()
private var mContext: Context? = null
init {
this.mContext = context
}
fun setListData(list: List<ImageDetails>) {
gifList=list
Log.i("Size SetListData", gifList!!.size.toString())
//Here it is showing List size 20
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder? {
val binding = DataBindingUtil.inflate<RecyclerviewListItemBinding>(LayoutInflater.from(parent.context), R.layout.recyclerview_list_item,
parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
//val binding = holder.binding;
Log.i("Size SizeBindHolder",gifList?.size.toString())
//Size = 0
/*Glide.with(mContext)
.load(gifList?.get(position)?.images?.dimen?.url)
.into(holder.imageView)*/
}
override fun getItemCount(): Int {
Log.i("Size ItemCount",gifList?.size.toString())
// Size = 0
return gifList?.size!!
}
class ViewHolder(var binding: RecyclerviewListItemBinding) : RecyclerView.ViewHolder(binding.root) {
var imageView: ImageView
init {
this.binding = binding
imageView = binding.imageView
}
}
Erstellen Sie eine Funktion Daten zu aktualisieren, in Adapter. Nennen Sie es als Antwort. Und rufen Sie notifyDataSetChanged –
Könnten Sie bitte erarbeiten? –