tate);
?
? ? setContentView(R.layout.search_query_grid_results);
? ? mQueryText = (TextView) findViewById(R.id.txt_query);
?
? ? //setup the grid view
? ? searchListResults = (GridView)findViewById(R.id.search_results);
? ? searchList= new Vector();
? ? //get and process search query here
? ? final Intent queryIntent = getIntent();
? ? doSearchQuery(queryIntent);
? ? adapter= new SearchAdapter(this,searchList);
? ? searchListResults.setAdapter(adapter);
?
? ? //Listener for grid view
? ? searchListResults.setOnItemClickListener(new AdapterView.OnItemClickListener() {
? ? ? @Override
? ? ? public void onItemClick(AdapterView> parent, View v, int position, long id){
? ? ? ? FragmentTransaction ft = getFragmentManager().beginTransaction();
? ? ? ? Fragment prev = getFragmentManager().findFragmentByTag("dialog");
? ? ? ? if (prev != null) {
? ? ? ? ? ft.remove(prev);
? ? ? ? }
? ? ? ? ft.addToBackStack(null);
? ? ? ? DialogFragment newFragment = SearchResultsDialogFragment.newInstance(searchList.elementAt(position));
? ? ? ? newFragment.show(ft, "dialog");
?
? ? ? }
? ? });
? }
代码示例 4: 主要的搜索结果类 (下面还会有)
当我们构建这个列表是,我们也将会处理没有查询到任何匹配项的情况下应该怎么做. 如果没有匹配,我们会查搜索的人显示一个消息对话框,让他们知晓,并且关闭搜索的activity,他们就不会看到一个空白的界面了.
/**
? * Builds the found item list.
? */
? private void doSearchQuery(final Intent queryIntent) {
? ? //Get the query text
? ? String message= queryIntent.getStringExtra(MainActivity.SEARCH_MESSAGE);
? ? //Set the UI field
? ? mQueryText.setText(message);
?
? ? RestaurantDatabase dB= new RestaurantDatabase(this);
? ? MenuFactory mMF= MenuFactory.getInstance();
? ? Cursor c= dB.searchMenuItems(message);
? ? Set categories = new HashSet();
? ? while (c.moveToNext()) {
? ? ? String category = c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.CATEGORY));
? ? ? categories.add(category);
?
? ? ? //build a new menu item and add it to the list
? ? ? MenuItem item= mMF.new MenuItem();
? ? ? item.setCategory(category);
? ? ? item.setName(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.NAME)));
? ? ? item.setDescription(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.DESCRIPTION)));
? ? ? item.setNutrition(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.NUTRITION)));
? ? ? item.setPrice(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.PRICE)));
? ? ? item.setImageName(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.IMAGENAME)));
? ? ? searchList.add(item);
? ? }
? ? c.close();
?
? ? //Handle the case of not finding anything
? ? if(searchList.size()==0){
? ? ? Intent intent = new Intent(SearchResultsActivity.this, OrderViewDialogue.class);
? ? ? intent.putExtra(OrderViewActivity.DIALOGUE_MESSAGE, "Sorry, no matching items found.");
? ? ? startActivity(intent);
? ? ? SearchResultsActivity.this.finish();
? ? }
? }
代码示例 4 续
类的这一个部分是网格视图的适配器, 这里我们能够只做相对很小的修改实现对来自主菜单代码本身的重用. 我们也能够适配布局文件,因此保持UI在视觉上的一致性具有无需重头开始,只要轻松的对代码进行回收利用这中好处. 你之前可能已经意识到了,我也重用了 OrderViewDialogue, 这事我志气啊为购物车写的一个类,但是在这里也能起作用.
/**
? * SearchAdapter to handle the grid view of found items. Each grid item contains
? * a view_grid_item which includes a image, name, and price.
? */
? class SearchAdapter extends BaseAdapter {
? ? private Vector mFoundList;
? ? private LayoutInflater inflater;
?
? ? public SearchAdapter(Context c, Vector list) {
? ? ? mFoundList= list;
? ? ? inflater = LayoutInfla