2013-12-09 34 views
0

我得到一个错误@Override,它是说我必须重写或实现一个超类型。@Override必须覆盖或实现一个超类型

这是我的代码,并且给我错误的位是protected void onNewIntent(意图intent)。

由于

public class CartListActivity extends ListActivity { 

     public class ProductListAdapter extends BaseAdapter { 

      @Override 
      protected void onNewIntent(Intent intent) { 
       String query = ""; 

       if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
        //use the query to search your data 
        query = intent.getStringExtra(SearchManager.QUERY); 
       } 
       int catId = intent.getIntExtra(MainActivity.SELECTED_CATEGORY, 0); 
       if (catId != 0) 
        categoryId = catId; 

       loader = new ListViewLoader(adapter, categoryId); 
       if (query.length() > 0) { 
        loader.execute(String.format(MainActivity.WEBSERVER_GETLIST + "q=%s", categoryId, query)); 
       } 
       else { 
        loader.execute(String.format(MainActivity.WEBSERVER_GETLIST, categoryId)); 
       } 
      } 

      private final Context context; 
      private List<Product> itemList; 
      public List<Product> getItemList() { 
       return itemList; 
      } 

      public void setItemList(List<Product> itemList) { 
       this.itemList = itemList; 
      } 

      public Context getContext() { 
       return context; 
      } 

      public ProductListAdapter(Context c) { 
       context = c; 
      } 

      @Override 
      public int getCount() { 
       if(itemList == null) return 0; 
       else return itemList.size(); 
      }  

      @Override 
      public Object getItem(int position) { 
       if (itemList == null) return null; 
       else return itemList.get(position); 
      } 

      @Override 
      public long getItemId(int position) { 
       if (itemList == null) return 0; 
       else return itemList.get(position).hashCode(); 
      } 

      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 


       View cell = convertView; 

       if (cell == null) { 
        // get layout from mobile xml 
        LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
        cell = inflater.inflate(R.layout.adapter_product_list, parent, false); 
       } 

       Product p = itemList.get(position); 

       //set value into textview according to position 
       TextView textView = (TextView) cell.findViewById(R.id.product_title); 
       textView.setText(p.getProductName()); 

       // add £ symbol 
       textView = (TextView) cell.findViewById(R.id.product_info); 
       textView.setText("Price: " + "£"+ p.getPrice()); 

       //set value into imageview according to position 
       ImageView imgView = (ImageView) cell.findViewById(R.id.product_image); 
       // clear the image 
       imgView.setImageDrawable(null); 
       //and load from the network 
       p.loadImage(imgView, 54, 54); 

       return cell;    

      } 


     } 

     public static final Integer[] productIcons = { 
      0, // index 0 is empty 
      R.drawable.books, 
      R.drawable.films, 
      R.drawable.music, 
      R.drawable.games, 
     }; 

     private int categoryId; 
     private ProductListAdapter adapter; 
     private ListViewLoader loader; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      // get the category from the intent 
      Intent intent = getIntent(); 
      categoryId = intent.getIntExtra(MainActivity.SELECTED_CATEGORY, 0); 

      adapter = new ProductListAdapter(this); 
      setListAdapter(adapter); 

      // Show the Up button in the action bar. 
      setupActionBar(); 

      loader = new ListViewLoader(adapter, categoryId); 
      loader.execute(String.format(MainActivity.WEBSERVER_GETLIST, categoryId)); 
     } 

     /** 
     * Set up the {@link android.app.ActionBar}. 
     */ 
     private void setupActionBar() { 

      getActionBar().setDisplayHomeAsUpEnabled(true); 

     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.product_list, menu); 
      return true; 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
      case R.id.show_cart: 
       //create the intent for the cart activity 
       Intent intent = new Intent(getApplicationContext(), CartActivity.class); 
       startActivity(intent); 
       return true; 
      } 
      return super.onOptionsItemSelected(item); 
     } 

     @Override 
     public void onListItemClick(ListView l, View v, int position, long id) { 
      //create an intent 
      Intent intent = new Intent(this, ProductActivity.class); 
      Product p = (Product)adapter.getItem(position); 
      //specify the extra parameters we want to pass 
      intent.putExtra(MainActivity.SELECTED_CATEGORY, p.getCategoryId()); 
      intent.putExtra(MainActivity.SELECTED_PRODUCTID, p.getProductId()); 
      intent.putExtra(MainActivity.SELECTED_PRODUCTNAME, p.getProductName()); 
      intent.putExtra(MainActivity.SELECTED_PRODUCTPRICE, p.getPrice()); 
      intent.putExtra(MainActivity.SELECTED_SUITABLEFORKIDS, p.getSuitableForKids()); 

      startActivity(intent); 
     } 
    } 

回答

0

OnNewIntent只能在活动中重写。您正在将它扩展到适配器中。你可以将方法移动到Activity类并尝试它吗?

+0

我试过了,错误消失了,但是我试图实现的搜索功能并没有回退任何结果。谢谢 – user3070626

+0

将公共方法添加到适配器并从活动中的NewIntent方法传输结果:)如果标记帮助您,请将其标记为正确 – SalGad

0

的@Override注解告诉你打算覆盖来自一个子类(或接口)的方法,所述编译器。如果您不知道(例如因为您更改了签名而不再覆盖),则会生成警告。你有没有改变方法的签名或从其他地方复制/移动它?

2

OnNewIntentActivity的功能,并且只能在extendsActivity的类别中被覆盖。你正在扩展它在ProductListAdapter延伸Adapter

普莱斯代码移动到上层阶级CartListActivity您在其中宣布ProductListAdapter

public class CartListActivity extends ListActivity 
{ 
    @Override 
    protected void onNewIntent(Intent intent) 
    { 
     String query = ""; 
     if (Intent.ACTION_SEARCH.equals(intent.getAction())) 
     { 
      //use the query to search your data 
      query = intent.getStringExtra(SearchManager.QUERY); 
     } 
     int catId = intent.getIntExtra(MainActivity.SELECTED_CATEGORY, 0); 
     if (catId != 0) 
      categoryId = catId; 

     loader = new ListViewLoader(adapter, categoryId); 
     if (query.length() > 0) 
     { 
      loader.execute(String.format(MainActivity.WEBSERVER_GETLIST + "q=%s", categoryId, query)); 
     } 
     else 
     { 
      loader.execute(String.format(MainActivity.WEBSERVER_GETLIST, categoryId)); 
     } 
    } 

    //ALL OTHER FUNCTION OF CartListActivity 

    public class ProductListAdapter extends BaseAdapter 
    { 
     @Override 
     public int getCount() 
     { 
      if(itemList == null) 
       return 0; 
      else 
       return itemList.size(); 
     }  

     @Override 
     public Object getItem(int position) 
     { 
      if (itemList == null) 
       return null; 
      else 
       return itemList.get(position); 
     } 

     @Override 
     public long getItemId(int position) 
     { 
      if (itemList == null) 
       return 0; 
      else 
       return itemList.get(position).hashCode(); 
     } 
    } 
} 
0

您的项目配置为使用JRE源代码级别1.4(或更低)。要在Eclipse中解决这个问题

  1. 转到Java项目的Properties在Eclipse
  2. 转到Java Compiler菜单
  3. 检查Compiler Compliance Level设置为1.5或更高

刚想要让您知道@Override注释不需要覆盖方法。

+0

将其设置为1.6。谢谢你的提示 :) – user3070626

相关问题