java - ListView 中的行逐行膨胀

标签 java android xml

这是必要的代码。我试图对同一 ListView 中的行使用两个不同的 View 。我希望一组数组列表膨胀为行,然后是另一组。但发生的情况是行逐行膨胀。

代码:

    @Override
    public int getItemViewType(int position) {
        if (position < (mContactsNumber.size())) {
            a = 0;
            return a;
        } else {
            a = 1;
            return a;
        }
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        final int pos = i;
        int type = getItemViewType(i);
        View v = view;
        if (view == null) {
            switch (type) {
                case 0:
                    v = mInflater.inflate(R.layout.contacts_row, null);
                    name = (TextView) v.findViewById(R.id.contact_name);
                    name.setText(mContactsNames.get(i));
                    break;
                case 1:
                    v = mInflater.inflate(R.layout.manual_row, null);
                    mManual = (TextView) v.findViewById(R.id.manual_number);
                    mSwitch = (SwitchCompat) v.findViewById(R.id.manual_switch);
                    mManual.setText(mPermanentManual.get(i));
                    mSwitch.setTag(i);
                    try {
                        if (mManualList.contains(mPermanentManual.get(i))) {
                            mSwitch.setChecked(true);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    break;
            }
            return v;
        }

最佳答案

我认为当 convertView 不为 null 时会出现问题,因为您的 getView 方法中没有 else 语句。

您可以使用ItemViewType

将您的适配器更改为如下所示:

private class MyCustomAdapter extends BaseAdapter {

        private static final int TYPE_ITEM_0 = 0;
        private static final int TYPE_ITEM_1 = 1;
        private static final int TYPE_MAX_COUNT = 2;

       ...


        @Override
        public int getItemViewType(int position) {
            return (position < (mContactsNumber.size()) ? TYPE_ITEM_0 : TYPE_ITEM_1;
        }

        @Override
        public int getViewTypeCount() {
            return TYPE_MAX_COUNT;
        }


        @Override
        public String getItem(int position) {
            return mData.get(position);
        }

        ...
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            int type = getItemViewType(position);

            if (convertView == null) {
                holder = new ViewHolder();
                switch (type) {
                    case TYPE_ITEM_0:
                        convertView = mInflater.inflate(R.layout.item1, null);
                        holder.textView = (TextView)convertView.findViewById(R.id.text);
                        break;
                    case TYPE_ITEM_1:
                        convertView = mInflater.inflate(R.layout.item2, null);
                        holder.textView = (TextView)convertView.findViewById(R.id.textSeparator);
                        break;
                }
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder)convertView.getTag();
            }
            holder.textView.setText(mData.get(position));
            return convertView;
        }

    }

关于java - ListView 中的行逐行膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27053702/

相关文章:

java - 类型的封闭实例不可访问

java - 添加 TabListener 时出现 NullPointerException

android - 如何在 Android 的单个响应中解析 XML 和 JSON 数据

java - 在Group之上展开Android的ExpandableListView Children

java - 无法解析为类型 - .java 文件位于包中并且未被看到

java - 使用 2D 和 3D 开发富桌面应用程序的最佳框架

java - RxJava 与用户创建的 Flowable 合并只发出最后一个 Flowable

java - 如何在 Android 中使用 firebase admin sdk 使用电子邮件和密码登录

Android 键盘输入/下一步按钮处理程序

xml - 检查节点集是否包含 XSLT 中的任何值