2014-04-10 3 views
0

저는 Java를 처음 사용하기 때문에 바보 같은 질문 인 경우 실례합니다.getItem (int) getItem (int)과 충돌합니다.

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에서 나는 다음과 같은 오류가 발생합니다 : " '의 getItem (INT)'에서 '(내 패키지 이름) .CustomDrawerAdapter'안드로이드 '에'의 getItem (int)에 '와 충돌 나는이 클래스를 얻었다. 위젯 .ArrayAdapter '; 호환되지 않는 반환 유형을 사용하려고합니다. " 자바를 처음 접했고이 문제를 해결하는 방법을 모르겠습니다. 누군가 저를 도와 줄 수 있습니까?

답변

2

CustomDrawerAdapter가 T를 DrawerItem으로 사용하여 <T>의 ArrayAdapter를 확장합니다. T는 CustomDrawerAdapter 클래스를 정의 할 때 형식 인수로 대체되는 형식 매개 변수이며, 형식 인수는 해당 경우에 DrawerItem입니다.

그래서 CustomDrawerAdapter는 기본적으로 DrawerItems 배열에서 표시 할 항목을 가져 오는 어댑터입니다.

ArrayAdapter와는 클래스 CustomDrawerAdapter에 대한

public DrawerItem getItem (int position) 

될 것입니다 방법

public T getItem (int position) 

을 정의합니다.

제네릭에 대한 내용은 http://docs.oracle.com/javase/tutorial/java/generics을 참조하십시오. 제네릭은 이해하기 쉽지 않지만 Android 개발을 수행 할 때는 기본적인 이해가 절대적으로 필요합니다.

해당 메서드를 재정의하려면 메서드에 다른 서명 (이름, 매개 변수의 수 및 유형을 더한 값)이없는 경우 반환 값을 변경할 수 없습니다.

CustomDrawerAdapter는 FriendInfo의 배열 (또는 목록) 또는 DrawerItem의 배열에서 데이터를 가져 오는 어댑터입니까? 대답에 따라 클래스 정의는

public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> 

또는 FriendInfo이 DrawerItem을 확장하지 않는 한 이해가되지 않는 ArrayAdapter와를 백업하는 두 클래스를 사용

public class CustomDrawerAdapter extends ArrayAdapter<FriendInfo> 

것 그것은 아닌 것 같습니다. 어떤 목적 으로든 두 번째 객체 배열 (FriendInfo)이 정말로 필요한 경우 수행중인 작업을 정확히 알지 못하는 경우 ArrayAdapter 메소드 (예 : getCount(), getItemId (int) 또는 getItem (int))를 수정하지 마십시오. . 예. 당신의 getCount()는 DrawerItems와 FriendInfo []의 숫자 대신 FriendInfo []의 크기를 반환하기 때문에 실패 할 것입니다. setFriendList를 호출하기 전에 FriendInfo []와 같은 수의 요소가 없을 수도 있습니다. 전달 된 배열은 생성자에서 전달한 List와 동일한 수의 요소를 가집니까?).

1

ArrayAdapter<DrawerItem>으로 확장되므로 getItem은 DrawerItem을 반환해야합니다. ArrayAdapter를 확장하면서이 문제를 해결할 수있는 확실한 방법을 찾을 수 없다면 BaseAdapter을 확장하여 직접 어댑터 구현을 쉽게 할 수 있습니다.

관련 문제