gpt4 book ai didi

java - getItem(int) 与 getItem(int) 冲突

转载 作者:行者123 更新时间:2023-12-01 23:04:45 24 4
gpt4 key购买 nike

我是 Java 新手,所以如果这是一个愚蠢的问题,请原谅我。我得到了这门课:

public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> {

Context context;
List<DrawerItem> drawerItemList;
int layoutResID;
private FriendInfo[] friends = null;

public void setFriendList(FriendInfo[] friends)
{
this.friends = friends;
}

public int getCount() {

return friends.length;
}


public FriendInfo getItem(int position) {
return friends[position];
}

public long getItemId(int position) {

return 0;
}

public CustomDrawerAdapter(Context context, int layoutResourceID,
List<DrawerItem> listItems) {
super(context, layoutResourceID, listItems);
this.context = context;
this.drawerItemList = listItems;
this.layoutResID = layoutResourceID;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

DrawerItemHolder drawerHolder;
View view = convertView;

if (view == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
drawerHolder = new DrawerItemHolder();

view = inflater.inflate(layoutResID, parent, false);
drawerHolder.ItemName = (TextView) view
.findViewById(R.id.drawer_itemName);
drawerHolder.icon = (ImageView) view.findViewById(R.id.drawer_icon);

view.setTag(drawerHolder);

} else {
drawerHolder = (DrawerItemHolder) view.getTag();

}

DrawerItem dItem = (DrawerItem) this.drawerItemList.get(position);


drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(
dItem.getImgResID()));
drawerHolder.ItemName.setText(friends[position].userName);

return view;
}

private static class DrawerItemHolder {
TextView ItemName;
ImageView icon;
}

在 FriendInfo 中,我收到以下错误:“(我的包名称).CustomDrawerAdapter”中的“getItem(int)”与“android.widget.ArrayAdapter”中的“getItem(int)”冲突;尝试使用不兼容的返回类型”我是 Java 新手,我不知道如何解决这个问题,有人可以帮助我吗?

最佳答案

您的 CustomDrawerAdapter 扩展了 ArrayAdapter ,其中 T 是一个 DrawerItem。 T 是一个类型参数,当您定义 CustomDrawerAdapter 类时,它会被类型参数替换,在您的情况下,类型参数是 DrawerItem。

所以 CustomDrawerAdapter 基本上是一个适配器,从 DrawerItems 数组中拉出要显示的项目。

ArrayAdapter定义了一个方法

public T getItem (int position) 

这将是

public DrawerItem getItem (int position)

对于您的类 CustomDrawerAdapter。

您可能想阅读有关泛型的教程:http://docs.oracle.com/javase/tutorial/java/generics 。请注意,泛型并不容易理解,但在进行 Android 开发时绝对需要有基本的了解。

如果您决定重写该方法,则无法更改返回值,除非该方法具有不同的签名(名称,加上其参数的数量和类型)。

您必须问自己:CustomDrawerAdapter 是一个从 FriendInfo 数组(或列表)或从 DrawerItem 数组中提取数据的适配器吗?根据答案,您的类定义将是

public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem>

public class CustomDrawerAdapter extends ArrayAdapter<FriendInfo>

使用这两个类来支持 ArrayAdapter 没有意义,除非 FriendInfo 正在扩展 DrawerItem,而这似乎不太可能。如果出于某种目的确实需要第二个对象数组 (FriendInfo),则不要修改 ArrayAdapter 方法(如 getCount()、getItemId(int) 或 getItem(int)),除非您确切知道自己在做什么。例如。你的 getCount() 注定会失败,因为它返回 FriendInfo[] 的大小而不是 DrawerItems 的数量,并且 FriendInfo[] 可能没有相同数量的元素(在你调用 setFriendList 之前它肯定没有,谁保证传递的数组与构造函数中传递的 List 具有相同数量的元素?)。

关于java - getItem(int) 与 getItem(int) 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22977486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com