<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/searchItems"
android:title="@string/search"
app:showAsAction="ifRoom"
android:icon="@drawable/ic_baseline_search_24"
app:actionViewClass="android.widget.SearchView"/>
<item android:id="@+id/menu_logout"
android:title="@string/logout"
/>
</menu>
this is menu.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".view.AdminActivity">
<ImageView
android:id="@+id/searchView"
android:layout_width="50dp"
android:layout_height="50dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:src="@drawable/arivali"
android:layout_marginStart="4dp"
android:layout_marginTop="8dp"
android:layout_alignParentTop="true"
/>
<View
android:id="@+id/view1"
android:layout_width="0dp"
android:layout_height="1dp"
android:background="@color/black"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/searchView"/>
<TextView
android:id="@+id/top_tv"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
android:text="@string/excel_data"
android:fontFamily="cursive"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="@id/searchView"
app:layout_constraintBottom_toBottomOf="@id/searchView"
android:textAlignment="center"
android:layout_marginEnd="16dp"
app:layout_constraintStart_toEndOf="@+id/searchView"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_excel_data"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="8dp"
app:layout_constraintTop_toBottomOf="@id/view1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<TextView
android:id="@+id/btn_upload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:visibility="gone"
android:paddingTop="250dp"
android:paddingBottom="250dp"
android:text="@string/click_here_to_upload_an_excel_sheet"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
this is activity and user xml
class AdminAndUserActivity : AppCompatActivity() {
private val userDetailAdapter = UserDetailAdapter()
private lateinit var sharedPreferences: SharedPreferences
private var isInsert: Boolean = false
private lateinit var binding: ActivityAdminAndUserBinding
private var userType: String? = null
private var studentList: MutableList<Student>? = null
private lateinit var viewModel: AdminAndUserViewModel
private lateinit var client: AsyncHttpClient
private lateinit var workbook: Workbook
private var name: String? = null
private var gender: String? = null
private var city: String? = null
private var status: String? = null
private lateinit var dialog: Dialog
private lateinit var searchView: SearchView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityAdminAndUserBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
dialog = Dialog(this)
sharedPreferences = this.getSharedPreferences(SHARED_PREF, Context.MODE_PRIVATE)
viewModel = ViewModelProvider(
this,
ViewModelProvider.AndroidViewModelFactory.getInstance(application)
)[AdminAndUserViewModel::class.java]
binding.progressbar.visibility = View.GONE
studentList = mutableListOf()
isInsert = sharedPreferences.getBoolean("insert_key", false)
binding.rvExcelData.apply {
adapter = userDetailAdapter
layoutManager =
LinearLayoutManager(this@AdminAndUserActivity, LinearLayoutManager.VERTICAL, false)
}
if (intent != null) {
userType = intent.getStringExtra(USER_TYPE)!!
}
if (userType.equals("admin")) {
if (!isInsert) {
binding.topTv.text = getString(R.string.upload_excel_sheet)
binding.btnUpload.visibility = View.VISIBLE
binding.rvExcelData.visibility = View.GONE
} else {
binding.topTv.text = getString(R.string.excel_sheet)
binding.btnUpload.visibility = View.GONE
binding.progressbar.visibility = View.VISIBLE
binding.rvExcelData.visibility = View.VISIBLE
uploadUserDetails()
}
} else {
binding.topTv.text = getString(R.string.excel_sheet)
binding.btnUpload.visibility = View.GONE
binding.rvExcelData.visibility = View.VISIBLE
binding.progressbar.visibility = View.VISIBLE
uploadUserDetails()
}
binding.btnUpload.setOnClickListener {
binding.progressbar.visibility = View.VISIBLE
readExcelFile()
}
userDetailAdapter.itemClickListener {
viewModel.updateStudent(Student(it.id, it.name, it.gender, it.city, "Active"))
Toast.makeText(this, "${it.name} Updated Active", Toast.LENGTH_SHORT).show()
//binding.progressbar.visibility = View.VISIBLE
finish()
startActivity(intent)
}
}
private fun readExcelFile() {
client = AsyncHttpClient()
client[EXCELSHEET_URL, object : FileAsyncHttpResponseHandler(this) {
override fun onFailure(
statusCode: Int,
headers: Array<Header>,
throwable: Throwable,
file: File
) {
binding.progressbar.visibility = View.GONE
Log.e("====", "Error is : " + throwable.message)
Toast.makeText(
this@AdminAndUserActivity,
"Fail to import Excel file",
Toast.LENGTH_SHORT
).show()
}
override fun onSuccess(statusCode: Int, headers: Array<Header>, file: File) {
binding.progressbar.visibility = View.GONE
val ws = WorkbookSettings()
ws.gcDisabled = true
try {
workbook = Workbook.getWorkbook(file)
val sheet = workbook.getSheet(0)
for (i in 0 until sheet.rows) {
val row = sheet.getRow(i)
name = row[0].contents
gender = row[1].contents
city = row[2].contents
status = row[3].contents
studentList?.add(Student(0L, name!!, gender!!, city!!, status!!))
}
studentList?.let { insertStudentData(it) }
} catch (e: IOException) {
binding.progressbar.visibility = View.GONE
Toast.makeText(this@AdminAndUserActivity, e.message, Toast.LENGTH_SHORT)
.show()
e.printStackTrace()
} catch (e: BiffException) {
binding.progressbar.visibility = View.GONE
e.printStackTrace()
Toast.makeText(this@AdminAndUserActivity, e.message, Toast.LENGTH_SHORT)
.show()
}
}
}]
}
private fun insertStudentData(mutableList: MutableList<Student>) {
viewModel.insertStudent(mutableList)
val editor: SharedPreferences.Editor = sharedPreferences.edit()
editor.putBoolean("insert_key", true)
editor.apply()
editor.commit()
dialog.setContentView(R.layout.custom_layout_dialog)
val no = dialog.findViewById<Button>(R.id.tv_no)
val yes = dialog.findViewById<Button>(R.id.tv_yes)
no.setOnClickListener {
dialog.dismiss()
finish()
}
yes.setOnClickListener {
dialog.dismiss()
binding.topTv.text = getString(R.string.excel_sheet)
binding.btnUpload.visibility = View.GONE
binding.progressbar.visibility = View.VISIBLE
binding.rvExcelData.visibility = View.VISIBLE
uploadUserDetails()
}
dialog.show()
}
private fun uploadUserDetails() {
viewModel.allStudent.observe(this) {
it.let {
binding.progressbar.visibility = View.GONE
studentList?.addAll(it)
studentList?.let { it1 ->
userDetailAdapter.setContentList(it1, userType!!)
}
}
}
}
override fun onBackPressed() {
moveTaskToBack(true)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.menu_logout) {
val intent = Intent(this@AdminAndUserActivity, MainActivity::class.java)
startActivity(intent)
finish()
return true
}
return true
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.menu, menu)
val search = menu.findItem(R.id.searchItems)
searchView = search.actionView as SearchView
searchView.isSubmitButtonEnabled = true
searchView.setOnQueryTextListener(object:
SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String?): Boolean {
if (query != null) {
getItemsFromDb(query)
}
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
if (newText != null) {
getItemsFromDb(newText)
}
return true
}
})
return super.onCreateOptionsMenu(menu)
}
private fun getItemsFromDb(searchText: String) {
var searchText = searchText
searchText = "%$searchText%"
viewModel.searchForItems(name = searchText).observe(this@AdminAndUserActivity, { list ->
list?.let {
Log.e("List = ", list.toString())
}
})
viewModel.allStudent
}
}
this is AdminandUserActivity.kt
I have a list of data in recycler view and I want to use search view so I can search people by name, my search view is working fine because when I search any name the search result is visible in Logcat but the searched name is not appearing on Top can someone please explain why, I am stuck on this for more then 2 days