有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在一个适配器中使用两个ViewHolder

在列表视图中使用分段时,我遇到了一个问题。我需要使用viewholder使listview滚动平滑,但我不知道如何实现两个viewholder,因为有两个独立的视图,一个是截面,另一个是简单的输入。这是我尝试过的代码和我得到的错误。请告诉我哪里做错了,如何纠正:

代码

@
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 安卓.widget.AbsListView.obtainView(AbsListView.java:2334)
02-27 12:49:28.461: E/AndroidRuntime(20200):    at 安卓.widget.ListView.measureHeightOfChildren(ListView.java:1409)
02-27 12:49:28.461: E/AndroidRuntime(20200):    at 安卓.widget.ListView.onMeasure(ListView.java:1273)

共 (1) 个答案

  1. # 1 楼答案

    您需要重写getItemViewType()中的ListAdapter,为每种类型的行返回一个不同的数字。在您的情况下,您可以返回0作为节,返回1作为常规行。然后,将使用适当的View类型调用getView()进行回收

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