From 10a59f1575745330b5843ec09311ff81200c6e60 Mon Sep 17 00:00:00 2001 From: Smarshal21 Date: Tue, 19 Sep 2023 01:49:31 +0530 Subject: [PATCH] Replaced ListView with RecyclerView --- .../talk/adapters/GeocodingAdapter.kt | 44 ++++++++++++------- .../talk/location/GeocodingActivity.kt | 29 +++++++----- .../main/res/layout/activity_geocoding.xml | 5 +-- 3 files changed, 48 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/GeocodingAdapter.kt b/app/src/main/java/com/nextcloud/talk/adapters/GeocodingAdapter.kt index 698d319b25f..8350da0b0f9 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/GeocodingAdapter.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/GeocodingAdapter.kt @@ -24,35 +24,47 @@ import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.BaseAdapter import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView import com.nextcloud.talk.R import fr.dudie.nominatim.model.Address -class GeocodingAdapter(context: Context, val dataSource: List
) : BaseAdapter() { +class GeocodingAdapter(private val context: Context, private val dataSource: List
) : + RecyclerView.Adapter() { - private val inflater: LayoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater - - override fun getCount(): Int { - return dataSource.size + interface OnItemClickListener { + fun onItemClick(position: Int) } - override fun getItem(position: Int): Any { - return dataSource[position] + private var listener: OnItemClickListener? = null + fun setOnItemClickListener(listener: OnItemClickListener) { + this.listener = listener } - override fun getItemId(position: Int): Long { - return position.toLong() + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val inflater = LayoutInflater.from(context) + val view = inflater.inflate(R.layout.geocoding_item, parent, false) + return ViewHolder(view) } - override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { - val rowView = inflater.inflate(R.layout.geocoding_item, parent, false) + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val address = dataSource[position] + holder.nameView.text = address.displayName - val nameView = rowView.findViewById(R.id.name) as TextView + holder.itemView.setOnClickListener { + listener?.onItemClick(position) + } + } - val address = getItem(position) as Address - nameView.text = address.displayName + override fun getItemCount(): Int { + return dataSource.size + } + + fun getItem(position: Int): Any { + return dataSource[position] + } - return rowView + inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val nameView: TextView = itemView.findViewById(R.id.name) } } diff --git a/app/src/main/java/com/nextcloud/talk/location/GeocodingActivity.kt b/app/src/main/java/com/nextcloud/talk/location/GeocodingActivity.kt index 854d3825cc3..5e94022a591 100644 --- a/app/src/main/java/com/nextcloud/talk/location/GeocodingActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/location/GeocodingActivity.kt @@ -31,10 +31,11 @@ import android.util.Log import android.view.Menu import android.view.MenuItem import android.view.inputmethod.EditorInfo -import android.widget.AdapterView import androidx.appcompat.widget.SearchView import androidx.core.view.MenuItemCompat import androidx.preference.PreferenceManager +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import autodagger.AutoInjector import com.google.android.material.snackbar.Snackbar import com.nextcloud.talk.R @@ -77,6 +78,7 @@ class GeocodingActivity : lateinit var adapter: GeocodingAdapter private var geocodingResults: List
= ArrayList() + private lateinit var recyclerView: RecyclerView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -91,6 +93,10 @@ class GeocodingActivity : roomToken = intent.getStringExtra(BundleKeys.KEY_ROOM_TOKEN)!! query = intent.getStringExtra(BundleKeys.KEY_GEOCODING_QUERY) + recyclerView = findViewById(R.id.geocoding_results) + recyclerView.layoutManager = LinearLayoutManager(this) + adapter = GeocodingAdapter(this, geocodingResults) + recyclerView.adapter = adapter } override fun onStart() { @@ -108,16 +114,17 @@ class GeocodingActivity : Log.e(TAG, "search string that was passed to GeocodingController was null or empty") } - binding.geocodingResults.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id -> - val address: Address = adapter.getItem(position) as Address - val geocodingResult = GeocodingResult(address.latitude, address.longitude, address.displayName) - - val intent = Intent(this, LocationPickerActivity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - intent.putExtra(BundleKeys.KEY_ROOM_TOKEN, roomToken) - intent.putExtra(BundleKeys.KEY_GEOCODING_RESULT, geocodingResult) - startActivity(intent) - } + adapter.setOnItemClickListener(object : GeocodingAdapter.OnItemClickListener { + override fun onItemClick(position: Int) { + val address: Address = adapter.getItem(position) as Address + val geocodingResult = GeocodingResult(address.latitude, address.longitude, address.displayName) + val intent = Intent(this@GeocodingActivity, LocationPickerActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + intent.putExtra(BundleKeys.KEY_ROOM_TOKEN, roomToken) + intent.putExtra(BundleKeys.KEY_GEOCODING_RESULT, geocodingResult) + startActivity(intent) + } + }) } private fun setupActionBar() { diff --git a/app/src/main/res/layout/activity_geocoding.xml b/app/src/main/res/layout/activity_geocoding.xml index 54546788769..d58ca3b7153 100644 --- a/app/src/main/res/layout/activity_geocoding.xml +++ b/app/src/main/res/layout/activity_geocoding.xml @@ -44,10 +44,9 @@ tools:title="@string/nc_app_product_name" /> - - + android:layout_height="match_parent"/>