I'm having trouble trying to re-display the ListView's original values with it's respective Icons after I try to query Search in the SearchView. The ListView firsts display the items with the icons but disappears when trying to search and after. A help is so much appreciated, Thank you.
MainActivity.java
package com.example.asus.sdssuanhandbookapplication;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
MySimpleAdapter adapter;
ListView listView;
String[] items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.list_view_article);
items = getResources().getStringArray(R.array.article_list);
adapter = new MySimpleAdapter(this, items);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String text = listView.getItemAtPosition(position).toString();
Toast.makeText(MainActivity.this, "" + text, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search, menu);
MenuItem searchItem = menu.findItem(R.id.item_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
ArrayList<String> templist = new ArrayList<>();
for (String temp : items) {
if (temp.toLowerCase().contains(newText.toLowerCase())) {
templist.add(temp);
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this,
android.R.layout.simple_list_item_1, templist);
listView.setAdapter(adapter);
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
}
MySimpleAdapter.java
package com.example.asus.sdssuanhandbookapplication;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
/**
* Created by asus on 2/9/2017.
*/
public class MySimpleAdapter extends BaseAdapter {
private final Activity context;
private final String[] names;
int[] imgs = {R.drawable.icn1,
R.drawable.icn2,
R.drawable.icn3,
R.drawable.icn4,
R.drawable.icn5,
R.drawable.icn6,
R.drawable.icn7,
R.drawable.icn8,
R.drawable.icn9,
R.drawable.icn10,
R.drawable.icn11,
R.drawable.icn12,
R.drawable.icn13,
R.drawable.icn14,
R.drawable.icn15,
R.drawable.icn16,
R.drawable.icn17,
R.drawable.icn18,
R.drawable.icn19,
R.drawable.icn20,
R.drawable.icn21,
R.drawable.icn22
};
static class ViewHolder{
public TextView text;
public ImageView image;
}
public MySimpleAdapter(Activity context, String[] names) {
this.context = context;
this.names = names;
}
@Override
public int getCount() {
return names.length;
}
@Override
public Object getItem(int position) {
return names[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
if (rowView == null){
LayoutInflater inflater = context.getLayoutInflater();
rowView = inflater.inflate(R.layout.row_layout, null);
//Configure view holder
ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) rowView.findViewById(R.id.articleTxt);
viewHolder.image = (ImageView) rowView.findViewById(R.id.articleImage);
rowView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) rowView.getTag();
String s = names[position];
int icon = imgs[position];
holder.text.setText(s);
holder.text.setTextSize(13);
holder.image.setImageResource(icon);
return rowView;
}
}
row_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_margin="10dp"
android:id="@+id/articleImage"
android:src="@drawable/icn1"/>
<TextView
android:layout_marginTop="15dp"
android:layout_marginRight="20dp"
android:text="title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:id="@+id/articleTxt"/>
</LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.asus.sdssuanhandbookapplication.MainActivity">
<ListView
android:id="@+id/list_view_article"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
Here are the actual shots of the app process:
Here is the Original ListView display on App first Open
Then when trying to query on Search, and displays the same after which Icons were gone
change your code like this in main
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
MySimpleAdapter adapter;
ListView listView;
String[] items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.list_view_article);
items = getResources().getStringArray(R.array.article_list);
adapter = new MySimpleAdapter(this, items, null);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String text = listView.getItemAtPosition(position).toString();
Toast.makeText(MainActivity.this, "" + text, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search, menu);
MenuItem searchItem = menu.findItem(R.id.item_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
ArrayList<String> tempList = new ArrayList<>();
int[] indexs = new int[items.lenght];
int j = 0;
for (int i = 0; i < items.length; i++) {
if (items[i].toLowerCase().contains(newText.toLowerCase())) {
// getting String data
tempList.add(items[i]);
// getting index for images
indexs[j] = i;
j++;
}
}
// MySimpleAdapter with 3 parameters
adapter = new MySimpleAdapter(MainActivity.this, tempList.toArray(new String[tempList.size()]), indexs);
listView.setAdapter(adapter);
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
}
and in MySimpleAdapter
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MySimpleAdapter extends BaseAdapter {
private final Activity context;
private final String[] names;
private final int[] indexs;
int[] imgs = {R.drawable.icn1,
R.drawable.icn2,
R.drawable.icn3,
R.drawable.icn4,
R.drawable.icn5,
R.drawable.icn6,
R.drawable.icn7,
R.drawable.icn8,
R.drawable.icn9,
R.drawable.icn10,
R.drawable.icn11,
R.drawable.icn12,
R.drawable.icn13,
R.drawable.icn14,
R.drawable.icn15,
R.drawable.icn16,
R.drawable.icn17,
R.drawable.icn18,
R.drawable.icn19,
R.drawable.icn20,
R.drawable.icn21,
R.drawable.icn22
};
static class ViewHolder {
public TextView text;
public ImageView image;
}
public MySimpleAdapter(Activity context, String[] names, int[] indexs) {
this.context = context;
this.names = names;
this.indexs = indexs;
}
@Override
public int getCount() {
return names.length;
}
@Override
public Object getItem(int position) {
return names[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = context.getLayoutInflater();
rowView = inflater.inflate(R.layout.row_layout, null);
//Configure view holder
ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) rowView.findViewById(R.id.articleTxt);
viewHolder.image = (ImageView) rowView.findViewById(R.id.articleImage);
rowView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) rowView.getTag();
String s = names[position];
int icon;
if(indexs == null) {
icon = imgs[position];
}
else{
icon = imgs[indexs[position]];
}
holder.text.setText(s);
holder.text.setTextSize(13);
holder.image.setImageResource(icon);
return rowView;
}
}