kullanarak liste görünümünü yenileyemiyor Liste görünümünü yeni verilerle yenilemem gerekiyor. Aşağıdaki kod, ilk defa FragmentActivity
numaralı OnCreateView
numaralı veriyi elde etmek için kullanılır. Android: CustomAdapter
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val url = "something"
val request_queue = Volley.newRequestQueue(this.context)
val stringRequest = StringRequest(Request.Method.GET, url,
Response.Listener<String> { response ->
val pending_job = Gson().fromJson<ArrayList<HashMap<String, String>>>(
response.toString(),
object : TypeToken<ArrayList<HashMap<String, String>>>() {}.type
)
[email protected](rootView, R.id.pending_job_list, pending_job)
pending_job_list_layout.setOnRefreshListener(this)
request_queue.stop()
}, Response.ErrorListener { error ->
if (error.networkResponse != null) {
Toast.makeText(this.context, error.networkResponse.statusCode.toString(), Toast.LENGTH_SHORT).show()
}
request_queue.stop()
})
request_queue.add(stringRequest)
}
showList
fun showList(rootView: View, tab_id: Int, job_list: ArrayList<HashMap<String, String>>) {
// custom display ListView
val adapter: CustomAdapter = CustomAdapter(
this.context,
job_list
)
this_adapter = adapter
val listView = rootView.findViewById(tab_id) as ListView
listView.adapter = adapter
}
olduğunu CustomAdapter ayarlamak için fonksiyon, ve bu CustomAdapter
sınıf,
class CustomAdapter(internal var mContext: Context,
internal var job_list: ArrayList<HashMap<String, String>>
) : BaseAdapter() {
override fun getCount(): Int {
return job_list.size
}
override fun getItem(position: Int): Any? {
return null
}
override fun getItemId(position: Int): Long {
return 0
}
override fun getView(position: Int, view: View?, parent: ViewGroup): View {
val mInflater = mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val item_view = mInflater.inflate(R.layout.activity_job_item, parent, false)
val job_name: MutableList<String> = arrayListOf()
job_list.mapTo(job_name) { it["BaseSiteName"] as String }
val nameView: TextView = item_view.findViewById(R.id.name) as TextView
nameView.text = job_name[position]
val job_date: MutableList<String> = arrayListOf()
job_list.mapTo(job_date) { it["PlanDt"] as String}
val dateView: TextView = item_view.findViewById(R.id.date) as TextView
dateView.text = job_date[position]
item_view.setOnClickListener{
val intent: Intent = Intent(mContext, JobDetailActivity::class.java)
intent.putExtra("job", job_list[position])
mContext.startActivity(intent)
}
return item_view
}
}
olduğunu yenilemek-edebiliyoruz. Listeyi yenilemek için aşağıdaki kodu yazdım.
override fun onRefresh() {
Toast.makeText(this.context, "Refresh", Toast.LENGTH_SHORT).show()
val rootView = this_inflater!!.inflate(R.layout.fragment_pending_job, this_container, false)
val url = "something"
val request_queue = Volley.newRequestQueue(this.context)
val stringRequest = StringRequest(Request.Method.GET, url,
Response.Listener<String> { response ->
val pending_job = Gson().fromJson<ArrayList<HashMap<String, String>>>(
response.toString(),
object : TypeToken<ArrayList<HashMap<String, String>>>() {}.type
)
val adapter: CustomAdapter = CustomAdapter(
this.context,
pending_job
)
val listView = rootView.findViewById(R.id.pending_job_list) as ListView
listView.adapter = adapter
pending_job_list_layout.isRefreshing = false
pending_job_list_layout.setOnRefreshListener(this)
request_queue.stop()
}, Response.ErrorListener { error ->
if (error.networkResponse != null) {
Toast.makeText(this.context, error.networkResponse.statusCode.toString(), Toast.LENGTH_SHORT).show()
}
request_queue.stop()
})
request_queue.add(stringRequest)
}
sadece tekrar CustomAdapter
başlatmasını ve tekrar liste görünümü götürün olup olmadığını.
Yenilediğimde listedeki hiçbir şey değiştirilmedi.
Yenileme sırasında parça görünümünüzü neden artırıyorsunuz? OnCreateView() 'parçasında şişirmelisiniz. Muhtemelen Response.Listener öğesindeki listenView Reference'ı yanlış kökten (yani yeni şişirdiğinizden) aldınız ve bu nedenle güncelleştirme görünmüyor. (Ekranınız eski rootView kullanıyor ve buna hiçbir şey yapmadınız). –
Bu kötü bir uygulama, neden ArrayList'i veriyle birlikte kullanmıyorsunuz ve tekrar ayarlamıyorsunuz? Bunun gibi: adapter.job_list = pending_job ve sonra notifyDataSetChanged() çağrısı? – mayosk
Sadece 'adapter.job_list 'öğesini onRefresh'e ekledikten sonra' adapter.notifyDataSetChanged() 'olarak adlandırıyorum, bu yüzden işe yarar! Bana yardım ettiğin için herkese teşekkür ederim. – gameraroma