Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getItem(int)与getItem(int)冲突_Java_Android - Fatal编程技术网

Java getItem(int)与getItem(int)冲突

Java getItem(int)与getItem(int)冲突,java,android,Java,Android,我是Java新手,如果这是一个愚蠢的问题,请原谅。 我上了这门课: public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> { Context context; List<DrawerItem> drawerItemList; int layoutResID; private FriendInfo[] friends = null; public void setFriendList(Frie

我是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;
}
公共类CustomDrawerRadapter扩展了ArrayAdapter{
语境;
列表列表;
int layoutResID;
private FriendInfo[]friends=null;
public void setFriendList(FriendInfo[]朋友)
{
这个。朋友=朋友;
}
public int getCount(){
返回朋友。长度;
}
public FriendInfo getItem(内部位置){
交友(职位);;
}
公共长getItemId(int位置){
返回0;
}
公共CustomPaureRadapter(上下文、内部布局资源ID、,
列表项目){
超级(上下文、布局资源ID、列表项);
this.context=上下文;
this.drawerItemList=列表项;
this.layoutResID=layoutResourceID;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
付款人付款人付款人;
视图=转换视图;
如果(视图==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
抽屉文件夹=新的抽屉文件夹();
视图=充气机。充气(layoutResID,父级,false);
DroperHolder.ItemName=(TextView)视图
.findViewById(R.id.出票人\项目名称);
drawerHolder.icon=(ImageView)view.findViewById(R.id.drawer\u图标);
view.setTag(抽屉夹);
}否则{
DroperHolder=(DroperItemHolder)视图.getTag();
}
DroperItem数据项=(DroperItem)this.DroperItemList.get(位置);
drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(
getImgResID());
DroperHolder.ItemName.setText(朋友[position].userName);
返回视图;
}
私有静态类文件夹{
TextView项目名称;
图像视图图标;
}
在FriendInfo中,我收到以下错误:“(我的包名)中的“getItem(int)”。CustomDrawerRadapter与“android.widget.ArrayAdapter”中的“getItem(int)”冲突;试图使用不兼容的返回类型
我是Java新手,我不知道如何解决这个问题,有人能帮我吗?

因为它扩展了
ArrayAdapter
,getItem需要返回
DrawerItem
。如果在扩展ArrayAdapter时找不到一种干净的方法来解决这个问题,那么通过扩展
BaseAdapter

就可以很容易地实现自己的适配器 因为它扩展了
ArrayAdapter
,所以getItem需要返回一个
DrawerItem
。如果在扩展ArrayAdapter时找不到一个干净的方法来解决这个问题,那么通过扩展
BaseAdapter
您的CustomDrawerAdapter将ArrayAdapter扩展为DrawerItems是一个类型参数,在定义CustomDrawerDatapter类时,该参数将被类型参数替换,在您的示例中,类型参数为DrawerItem

因此CustomDrawerDatapter基本上是一个适配器,它从一个DrawerItems数组中提取要显示的项目

ArrayAdapter定义了一个方法

public T getItem (int position) 
哪一个是

public DrawerItem getItem (int position)
为了你的班级,我是雷达帕特

您可能想阅读有关泛型的本教程:。请注意,泛型不容易理解,但在进行Android开发时,您绝对需要基本了解

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

你必须问问自己:CustomDrawerDatapter是一个适配器,它从FriendInfo数组(或列表)还是DrawerItem数组中提取数据?这取决于你的类定义

public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem>
公共类CustomDrawerRadapter扩展了ArrayAdapter

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

您的CustomDrawerAdapter扩展了ArrayAdapter,其中T是一个DrawerItem。当您定义CustomDrawerAdapter类时,T是一个类型参数,该类型参数由一个类型参数替换,在您的示例中,类型参数是DrawerItem

因此CustomDrawerDatapter基本上是一个适配器,它从一个DrawerItems数组中提取要显示的项目

ArrayAdapter定义了一个方法

public T getItem (int position) 
哪一个是

public DrawerItem getItem (int position)
为了你的班级,我是雷达帕特

您可能想阅读有关泛型的本教程:。请注意,泛型不容易理解,但在进行Android开发时,您绝对需要基本了解

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

你必须问问自己:CustomDrawerDatapter是一个适配器,它从FriendInfo数组(或列表)还是DrawerItem数组中提取数据?这取决于你的类定义

public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem>
公共类CustomDrawerRadapter扩展了ArrayAdapter

公共类CustomDrawerRadapter扩展了ArrayAdapter
使用这两个类来支持ArrayAdapter是没有意义的,除非FriendInfo扩展了DrawerItem,而这似乎不太可能。 如果出于任何目的确实需要第二个对象数组(FriendInfo),那么不要修改ArrayAdapter方法