我收到@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);
}
}
答案 0 :(得分:2)
OnNewIntent
是Activity
的函数,只能在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中解决这个问题
Properties
Java Compiler
菜单Compiler Compliance Level
是否设置为1.5或更高只是想告诉您,覆盖方法不需要@Override
注释。