문제

listview에서 섹션을 사용하는 동안 문제가 발생했습니다.목록 보기를 부드럽게 스크롤하려면 뷰홀더를 사용해야 하지만 두 개의 별도 뷰가 있기 때문에 두 개의 뷰홀더를 구현하는 방법을 모르겠습니다. 하나는 섹션이고 두 번째는 간단한 항목입니다. 여기에 제가 시도한 코드와 제가 받은 오류가 있습니다. 내가 어디서 잘못하고 있는지, 어떻게 수정할 수 있는지 알려주세요.

암호

@
Override
public View getView(int position, View convertView, ViewGroup parent) {

    final GroupAccountdto i = items.get(position);
    if (i != null) {
        if (i.isSection()) {
            if (convertView == null) {
                convertView = vi.inflate(R.layout.list_group_section, null);
                ViewHolderGroup group_holder = new ViewHolderGroup();
                group_holder.group_name = (TextView) convertView.findViewById(R.id.list_section_group_name);
                convertView.setTag(group_holder);
            }
            ViewHolderGroup group_holder = (ViewHolderGroup) convertView.getTag();
            GiddhGroups si = (GiddhGroups) i;
            group_holder.group_name.setText(si.getGroupname());

        } else {
            if (convertView == null) {
                convertView = vi.inflate(R.layout.list_item_account, null);
                ViewHolderAccount account_holder = new ViewHolderAccount();
                account_holder.account_name = (TextView) convertView.findViewById(R.id.list_item_account_name);
                account_holder.account_bal = (TextView) convertView.findViewById(R.id.list_item_account_balance);
            }
            ViewHolderAccount account_holder = (ViewHolderAccount) convertView.getTag();
            GiddhAccounts ei = (GiddhAccounts) i;

            if (account_holder.account_name != null)
                account_holder.account_name.setText(ei.getAccountName());
            if (account_holder.account_bal != null)
                account_holder.account_bal.setText(ei.getBalance());
        }
    }
    return convertView;
}

static class ViewHolderGroup {
    TextView group_name;
}

static class ViewHolderAccount {
    public TextView account_name;
    public TextView account_bal;
}

오류

02-27 12:49:28.461: E/AndroidRuntime(20200): java.lang.ClassCastException: adapters.GroupAccountAdapter$ViewHolderGroup cannot be cast to adapters.GroupAccountAdapter$ViewHolderAccount
02-27 12:49:28.461: E/AndroidRuntime(20200):    at adapters.GroupAccountAdapter.getView(GroupAccountAdapter.java:53)
02-27 12:49:28.461: E/AndroidRuntime(20200):    at android.widget.AbsListView.obtainView(AbsListView.java:2334)
02-27 12:49:28.461: E/AndroidRuntime(20200):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1409)
02-27 12:49:28.461: E/AndroidRuntime(20200):    at android.widget.ListView.onMeasure(ListView.java:1273)
도움이 되었습니까?

해결책

재정의해야합니다 getItemViewType() 당신의 ListAdapter, 각 행 유형에 대해 고유한 숫자를 반환합니다.귀하의 경우에는 돌아올 수 있습니다 0 섹션 및 1 일반 행의 경우.그 다음에, getView() 적절한 이름으로 호출됩니다. View 재활용 유형.

@Override
public int getItemViewType(int position) {
  if (getItem(position).isSection()) {
    return(0);
  }

  return(1);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top