Artificial Intelligence in Healthcare
Artificial Intelligence in Healthcare
android
Action bar with SearchView
Beginning with Android 3.0, android supports to add SearchView widget to your action bar.
This search view can be use to search the content in a list view
Create a menu resource file with search menu item(when click on search menu item, search
widget will be appear in action bar)
Following is an example menu resource that I have created( res/menu/search_menu.xml)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
android:title="Search"
android:icon="@drawable/search"
android:showAsAction="collapseActionView|ifRoom"
android:actionViewClass="android.widget.SearchView" />
</menu>
In above menu item the collapseActionView attribute allows your SearchView to expand to
take up the whole action bar and collapse back down into a normal action bar item when not
in use
Create SearchableConfiguration
</searchable>
Then add this element into a relevant activity with <meta-data> tag
<activity
android:name=".ui.FriendListActivity"
android:screenOrientation="portrait"
android:configChanges="orientation"
android:theme="@style/Theme.Yello"
android:windowSoftInputMode="stateHidden"
android:launchMode="singleTask"
android:parentActivityName=".ui.SensorDetailsActivity">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable">
</meta-data>
</activity>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.search_menu, menu);
searchView.setSearchableInfo(searchManager.
getSearchableInfo(getComponentName()));
searchView.setSubmitButtonEnabled(true);
searchView.setOnQueryTextListener(this);
return true;
Now the SearchView added to the activity. But still searching functionality not working
Add searching functionality
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
friendListAdapter.getFilter().filter(newText);
return true;
In here onQueryTextChange function do the filtering with list adapter, In order to do the
filtering, adapter need to be implement Filterable interface
Following is the complete implementation of list activity( FriendListActivity)
https://github.com/erangaeb/dev-notes/blob/master/android-search-list/FriendListActivity.java
Filterable adapter
In here I have defined custom Filter class FriendFilter to do the filtering, I'm filtering the
list according to the nameentering in SearchView
I have defined two array lists here. One for display in list view and other one for
filtering(original list)
// original list, filtering do with this list
private ArrayList<User> friendList;
In my scenario when list item clicks, I'm navigate to new activity ShareActivity
When navigating, I'm collapsing the SearchView if it is visible
private void handelListItemClick(User user) {
// close search view if its visible
if (searchView.isShown()) {
searchMenuItem.collapseActionView();
searchView.setQuery("", false);
}
friendListView.setTextFilterEnabled(true);
@Override
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
friendListView.clearTextFilter();
}
else {
friendListView.setFilterText(newText.toString());
}
return true;
Now search view popup will be visible when searching. Actually is displays text that typing
in SearchView
1. main_activity.xml
2. list_row.xml
main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
list_row.xml
<ImageView
android:id="@+id/imageview"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="16dp"
android:layout_marginTop="12dp" />
<TextView
android:id="@+id/header"
android:textSize="16sp"
android:textColor="@color/colorPrimary"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/imageview"
android:layout_marginStart="18dp"
android:layout_marginTop="13dp"
android:layout_toEndOf="@+id/imageview" />
<TextView
android:id="@+id/subHeader"
android:textSize="12sp"
android:textStyle="bold"
android:textColor="@android:color/black"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/header"
android:layout_below="@+id/header" />
</RelativeLayout>
3. MainActivity.kt
package com.dharmendra.searchview
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.ListView
import android.widget.SearchView
import android.widget.Toast
Ex:-
At Position 1:
name:"Cupcake"
version:"1.5"
At Position 2:
name:"Donut"
version:"1.6"
.
.
.
So On
*/
val info = ArrayList<HashMap<String, String>>()
//Here We take HashMap in that we add Name and Version from Array
var hashMap: HashMap<String, String> = HashMap<String, String>()
for (i in 0..name.size - 1) {
hashMap = HashMap<String, String>()
hashMap.put("name", name[i])
hashMap.put("version", version[i])
/*
ArrayList Start with Position 0
So we have At position 0:
name:"Cupcake"
version:"1.5"
*/
searchView.setOnQueryTextListener(object :
SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
return false
}
Now Select Class in Kind and Add name of Class.Here Our Class name is Custo
mAdapter.
5. After Class is Created add parameter to Class(passed in Main Activity) an
d extend with BaseAdapter()
Ex:
..
..
..
You will get Some Error Put Your Cursor on Red line And Press Alt+Enter and c
lick on Implement Members and Select All Methods and click Ok.
CustomAdapter.kt
package com.dharmendra.searchview
import android.app.Activity
import android.content.Context
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.TextView
import java.util.*
import kotlin.collections.ArrayList
if (convertView == null) {
/*Here !! are use for non-null asserted two prevent From null.
you can also use Only Safe (?.)
*/
holder.mImageView =
myview!!.findViewById<ImageView>(R.id.imageview) as ImageView
holder.mHeader = myview!!.findViewById<TextView>(R.id.header)
as TextView
holder.mSubHeader =
myview!!.findViewById<TextView>(R.id.subHeader) as TextView
return myview
if (text.length == 0) {
/*If Search query is Empty than we add all temp data into our
main ArrayList
*/
image.addAll(tempArrayList)
arrayList.addAll(tempNameVersionList)
} else {
for (i in 0..tempNameVersionList.size - 1) {
/*
If our Search query is not empty than we Check Our search
keyword in Temp ArrayList.
if our Search Keyword in Temp ArrayList than we add to our
Main ArrayList
*/
if
(tempNameVersionList.get(i).get("name")!!.toLowerCase(Locale.getDefault()).
contains(text)) {
image.add(tempArrayList.get(i))
arrayList.add(tempNameVersionList.get(i))
}
}
}
}
Output: