我有一个重复行的分段适配器,有谁知道如何解决这个问题以及为什么会发生这种情况?
这是我的适配器类:
public class CustomUsersAdapter extends BaseAdapter {
private static final int TYPE_ITEM = 0;
private static final int TYPE_SEPARATOR = 1;
private ArrayList<UserInfoVO> mData = new ArrayList<UserInfoVO>();
private TreeSet<Integer> sectionHeader = new TreeSet<Integer>();
private LayoutInflater mInflater;
public CustomUsersAdapter(Context context) {
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addItem(final UserInfoVO item) {
mData.add(item);
notifyDataSetChanged();
}
public void addSectionHeaderItem(final UserInfoVO item) {
mData.add(item);
sectionHeader.add(mData.size() - 1);
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
return sectionHeader.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public UserInfoVO getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
int rowType = getItemViewType(position);
// if (convertView == null) {
holder = new ViewHolder();
switch (rowType) {
case TYPE_ITEM:
if (convertView == null) {
convertView = mInflater.inflate(R.layout.members_list_item, null);
holder = new ViewHolder();
holder.userImage = (CXRemoteImageView) convertView.findViewById(R.id.members_item_pic);
holder.title = (CXRobotoTextView) convertView.findViewById(R.id.members_item_title);
holder.small_text = (CXRobotoTextView) convertView.findViewById(R.id.members_item_small_text);
holder.userImage.loadImmediate(mData.get(position).getPictureUrl());
holder.title.setText(mData.get(position).getName());
holder.small_text.setText(mData.get(position).getAboutMe());
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
break;
case TYPE_SEPARATOR:
if (convertView == null) {
convertView = mInflater.inflate(R.layout.members_category_item, null);
TextView category = (TextView) convertView.findViewById(R.id.members_item_category);
category.setText(mData.get(position).getName());
convertView.setTag(category);
} else {
TextView category=(TextView) convertView.getTag();
}
break;
}
// convertView.setTag(holder);
// } else {
// try {
// holder = (ViewHolder) convertView.getTag();
// }catch (Exception e)
// {
// e.printStackTrace();
// }
// }
return convertView;
}
static class ViewHolder {
public CXRemoteImageView userImage;
public CXRobotoTextView title;
public CXRobotoTextView small_text;
}
}
这是我填充它的方法:
boolean members = false;
boolean friends = false;
usersAdapter=new CustomUsersAdapter(getActivity());
for (int i = 0; i < rFArray.size(); i++) {
if (rFArray.get(i).getName().equalsIgnoreCase("Members") || rFArray.get(i).getName().equalsIgnoreCase("My Friends")) {
if (rFArray.get(i).getName().equalsIgnoreCase("Members")) {
if (!members) {
members = true;
usersAdapter.addSectionHeaderItem(rFArray.get(i));
}
}
if (rFArray.get(i).getName().equalsIgnoreCase("My Friends")) {
if (!friends) {
friends = true;
usersAdapter.addSectionHeaderItem(rFArray.get(i));
}
}
} else {
usersAdapter.addItem(rFArray.get(i));
}
}
list.setAdapter(usersAdapter);
最佳答案
您重复行是因为您错误地处理了 convertView
不为 null
的情况。在这种情况下,您实际上也必须填写小部件。您只需跳过 inflate()
调用,因为您正在回收现有行。就您而言,回收时您会跳过所有内容。
关于java - 适配器重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26935450/