我想创建一个SearchView,它搜索每个启动特定第二个活动的GridItems。但是我无法弄清楚这个代码对我有什么帮助。我已经为SearchView设置了一个onQueryTextChangeListener,它应该允许我手动显示结果并在输入时显示结果。这是我想要发生的事情:如何在SearchView中将查询分配给GridItem?
当我键入一个特定的查询,比如说“car”,我想向用户显示一辆汽车的GridItem(它只是一个可点击的ImageView)。当我输入“Camera”时,我想向用户显示我的GridItem上的相机图像。
我也想在输入时向用户显示结果,所以当我只输入“c”时,我想向用户显示“car”和“Camera”GridItems。我想留在同一个活动中,所以我需要某种方式来删除所有GridItems,除了那些带有相机或汽车图片的GridItems,这取决于用户输入的内容,我不想启动搜索活动。
现在是什么让这个更难一点是我配置我的BaseAdapter在一个单独的类,这意味着我必须以某种方式间接提及GridItems。这是我到目前为止已经完成:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
final MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView)
MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if (query.equals(R.string.Coconut)){
//here I need some code that will tell the system that I want to show the GridItem with a picture of a coconut on it
}
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
这是单独的类初始化的图像在GridView:
class SingleItem{
int image;
double nutritional_value;
SingleItem(int image, double nutritional_value){
this.image = image;
this.nutritional_value = nutritional_value;
}
}
public class objectAdapter extends BaseAdapter {
ArrayList<SingleItem> list;
Context context;
Bundle myBundle;
objectAdapter(Context context) {
this.context = context;
myBundle = new Bundle();
double[][] nutritional_value = {
{89, 22.8, 0.3, 1},
{61, 1.5, 0.5, 1.1},
{375, 6.8, 0.6, 1.2},
{767, 0, 9.3, 0},
{580, 9.1, 42, 36.5}
};
myBundle.putSerializable("array_array", nutritional_value);
int[] image_id = {
R.drawable.Bananas, R.drawable.Kiwis, R.drawable.oatmeals, R.drawable.coconuts,
R.drawable.dark_chocolate
};
for (int i = 0; i < image_id.length; i++) {
SingleItem tempSingleItem = new SingleItem(image_id[i], nutritional_value[i][i]);
list.add(tempSingleItem);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.single_item, parent, false);
holder= new ViewHolder(row);
row.setTag(holder);
}
else {
holder = (ViewHolder) row.getTag();
}
SingleItem temp = list.get(position);
holder.myItem.setImageResource(temp.image);
holder.myItem.setTag(temp);
return row;
}
@Override
public long getItemId(int position) {
return position;
}
class ViewHolder
{
ImageView myItem;
ViewHolder(View v){
myItem = (ImageView) v.findViewById(R.id.imageView2);
}
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
}
提前感谢!
维达尔
我认为这应该工作,谢谢! –