[英]Implement searchview in android gridview
i have gridview in my android app which displays images and text so i want to add searchview in gridview so that when i type something in searchview i should be able to see matching gridview items ,,, i have managed to get seachview code for gridview but i am not been able to implement these code in my gridview, here is searchview code 我在显示图像和文本的android应用中有gridview,所以我想在gridview中添加searchview,以便当我在searchview中键入内容时,我应该能够看到匹配的gridview项。我无法在我的gridview中实现这些代码,这是searchview代码
MainActivity 主要活动
public class MainActivity extends Activity {
GridView gv;
SearchView sv;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initial Views
gv=(GridView) findViewById(R.id.gridView1);
sv=(SearchView) findViewById(R.id.searchView1);
// Adapter
gv.setAdapter adapter
// Set Adapter
adapter=new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1.teams);
sv.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onQueryTextChange(String query) {
// TODO Auto-generated method stub
adapter.getFilter().filter(query);
return false;
}
});
}
activity_main activity_main
<RelativeLayout 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: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.searching.MainActivity" >
<GridView
android:id="@+id/gridView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_marginTop="49dp"
android:numColumns="3" >
</GridView>
<SearchView
android:id="@+id/searchView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/gridView1"
android:layout_alignParentTop="true"
android:queryHint="Search Here"
android:layout_alignRight="@+id/gridView1" >
</SearchView>
so i want to implement this code in my gridview here is my gridview code 所以我想在我的gridview中实现此代码这是我的gridview代码
MainActivity 主要活动
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private GridviewAdapter mAdapter;
private ArrayList<String> listCountry;
private ArrayList<Integer> listFlag;
private GridView gridView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
prepareList();
// prepared arraylist and passed it to the Adapter class
mAdapter = new GridviewAdapter(this,listCountry, listFlag);
// Set custom adapter to gridview
gridView = (GridView) findViewById(R.id.gridView1);
gridView.setAdapter(mAdapter);
// Implement On Item click listener
gridView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
Toast.makeText(MainActivity.this, mAdapter.getItem(position), Toast.LENGTH_SHORT).show();
}
});
}
public void prepareList()
{
listCountry = new ArrayList<String>();
listCountry.add("india");
listCountry.add("Brazil");
listCountry.add("Canada");
listCountry.add("China");
listCountry.add("France");
listCountry.add("Germany");
listCountry.add("Iran");
listCountry.add("Italy");
listCountry.add("Japan");
listCountry.add("Korea");
listCountry.add("Mexico");
listCountry.add("Netherlands");
listCountry.add("Portugal");
listCountry.add("Russia");
listCountry.add("Saudi Arabia");
listCountry.add("Spain");
listCountry.add("Turkey");
listCountry.add("United Kingdom");
listCountry.add("United States");
listFlag = new ArrayList<Integer>();
listFlag.add(R.drawable.india);
listFlag.add(R.drawable.brazil);
listFlag.add(R.drawable.canada);
listFlag.add(R.drawable.china);
listFlag.add(R.drawable.france);
listFlag.add(R.drawable.germany);
listFlag.add(R.drawable.iran);
listFlag.add(R.drawable.italy);
listFlag.add(R.drawable.japan);
listFlag.add(R.drawable.korea);
listFlag.add(R.drawable.mexico);
listFlag.add(R.drawable.netherlands);
listFlag.add(R.drawable.portugal);
listFlag.add(R.drawable.russia);
listFlag.add(R.drawable.saudi_arabia);
listFlag.add(R.drawable.spain);
listFlag.add(R.drawable.turkey);
listFlag.add(R.drawable.united_kingdom);
listFlag.add(R.drawable.united_states);
}
GridviewAdapter GridviewAdapter
public class GridviewAdapter extends BaseAdapter {
private ArrayList<String> listCountry;
private ArrayList<Integer> listFlag;
private Activity activity;
public GridviewAdapter(Activity activity,ArrayList<String> listCountry, ArrayList<Integer> listFlag) {
super();
this.listCountry = listCountry;
this.listFlag = listFlag;
this.activity = activity;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return listCountry.size();
}
@Override
public String getItem(int position) {
// TODO Auto-generated method stub
return listCountry.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public static class ViewHolder
{
public ImageView imgViewFlag;
public TextView txtViewTitle;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder view;
LayoutInflater inflator = activity.getLayoutInflater();
if(convertView==null)
{
view = new ViewHolder();
convertView = inflator.inflate(R.layout.gridview_row, null);
view.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1);
view.imgViewFlag = (ImageView) convertView.findViewById(R.id.imageView1);
convertView.setTag(view);
}
else
{
view = (ViewHolder) convertView.getTag();
}
view.txtViewTitle.setText(listCountry.get(position));
view.imgViewFlag.setImageResource(listFlag.get(position));
return convertView;
}
here you go : 干得好 :
sv.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String newText) {
// filter your adapter here
private ArrayList<String> listCountrytemp;
private ArrayList<Integer> listFlagtemp;
for( int i =0 ; i<listContry.size() ; i++){
if(listContry(i).contains(newText)){
listCountrytemp.add(listContry(i));
listFlagtemp.add(listFlag(i));
}
}
return false;
}
@Override
public boolean onQueryTextChange(String query) {
// TODO Auto-generated method stub
adapter.getFilter().filter(query);
return false;
}
});
make your adapter take two arguments one for the Country array list and the other for the flags. 使您的适配器使用两个参数,一个用于“国家/地区”数组列表,另一个用于标志。
finally create an adapter with the listCountrytemp and listFlagtemp and send it to the grid view. 最后使用listCountrytemp和listFlagtemp创建一个适配器,并将其发送到网格视图。 i am not familiar with searchviews so i dont know where you should do the last step. 我不熟悉searchviews,所以我不知道您应该在哪里做最后一步。
this may be not the best solution but for me it works just fine. 这可能不是最好的解决方案,但对我来说效果很好。
not that the grid view will update as you type in the search view like facebook search. 并不是说网格视图会随着您在搜索视图(如Facebook搜索)中的键入而更新。
hope this helps 希望这可以帮助
Edit: 编辑:
creating gridview with the new arraylists: 使用新的arraylists创建gridview:
mAdapter = new GridviewAdapter(this,listCountrytemp , listFlagtemp);
gridView.setAdapter(mAdapter);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.