I need to update the list view with new data. This code below is used to retrieve data in OnCreateView
, which is in FragmentActivity
for the first time.
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 ) this@PlaceholderFragment.showList (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
is a function to install a CustomAdapter that
fun showList(rootView: View, tab_id: Int, job_list: ArrayList<HashMap<String, String>>) {
and this CustomAdapter
class,
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 }
}
However, I want the list to be updated. I wrote the following code to update the list.
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) }
This simply creates an instance of the CustomAdapter
and returns it to the list again.
When I update, nothing in the list changes.