@Override必须覆盖或实现超类型

时间:2013-12-09 12:29:17

标签: java android eclipse

我收到@Override的错误,它说我必须覆盖或实现超类型。

这是我的代码,并且给我错误的位受保护void onNewIntent(Intent 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);
        }
    }

4 个答案:

答案 0 :(得分:2)

OnNewIntentActivity的函数,只能在extends Activity的类中重写。您可以在ProductListAdapter扩展Adapter中对其进行扩展。

请将代码移至您声明为CartListActivity class

的上层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();
        }
    }
}

答案 1 :(得分:0)

@Override注释告诉编译器您打算从子类(或接口)覆盖方法。如果您没有(例如因为您更改了签名而不再覆盖),则会生成警告。您是否更改了该方法的签名或从其他地方复制/移动了它?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

  1. 转到Eclipse中Java项目的Properties
  2. 转到Java Compiler菜单
  3. 检查Compiler Compliance Level是否设置为1.5或更高
  4. 只是想告诉您,覆盖方法不需要@Override注释。