Android ListView节分割器跳转和相乘

Android ListView节分割器跳转和相乘,android,listview,android-listview,listview-adapter,Android,Listview,Android Listview,Listview Adapter,我的ListView快疯了,我不知道为什么 这里,在适配器中,我使用VISIBLE/GONE方法放置了一个ListView节分隔符。出于测试目的,我将if语句设置在位置0。现在,我希望节分隔符仅在position==0列表项上方可见,但它非常有趣: 起初它看起来不错,但当我向下滚动listView时,我可以看到部分分隔符不仅在位置==0,而且在随机位置,它们不应该在那里。最重要的是,当我向后滚动时,分隔符被混合到另一个列表项中,所以不是一个分隔符,而是在一个随机位置上有随机数的分隔符,发生了什么

我的ListView快疯了,我不知道为什么

这里,在适配器中,我使用VISIBLE/GONE方法放置了一个ListView节分隔符。出于测试目的,我将if语句设置在位置0。现在,我希望节分隔符仅在position==0列表项上方可见,但它非常有趣:

起初它看起来不错,但当我向下滚动listView时,我可以看到部分分隔符不仅在位置==0,而且在随机位置,它们不应该在那里。最重要的是,当我向后滚动时,分隔符被混合到另一个列表项中,所以不是一个分隔符,而是在一个随机位置上有随机数的分隔符,发生了什么,我应该怎么做来修复它

哦,这是我的适配器:

public class ScheduleListAdapter extends BaseAdapter {

Context mContext;
List<ScheduleItem> scheduleItems;
LayoutInflater mLayoutInflater;
String[] weekDays;

public ScheduleListAdapter(Context mContext, List<ScheduleItem> scheduleItems) {
    this.mContext = mContext;
    this.scheduleItems = scheduleItems;
    mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    weekDays = mContext.getResources().getStringArray(R.array.schedule_days);
}

@Override
public int getCount() {
    return scheduleItems.size();
}

@Override
public Object getItem(int position) {
    return scheduleItems.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        holder = new ViewHolder();
        convertView = mLayoutInflater.inflate(R.layout.list_item_schedule, null);
        holder.startTime = (TextView) convertView.findViewById(R.id.textView_scheduleStartTime);
        holder.endTime = (TextView) convertView.findViewById(R.id.textView_scheduleEndTime);
        holder.module = (TextView) convertView.findViewById(R.id.textView_scheduleModule);
        holder.lecturer = (TextView) convertView.findViewById(R.id.textView_scheduleLecturer);
        holder.moduleType = (TextView) convertView.findViewById(R.id.textView_scheduleModuleType);
        holder.room = (TextView) convertView.findViewById(R.id.textView_scheduleRoom);
        holder.daySeparator = (TextView) convertView.findViewById(R.id.textView_scheduleDay);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    ScheduleItem scheduleItem = scheduleItems.get(position);
    if (position == 0) {
        switch (scheduleItem.getDayNumber()) {
            case 1:
                holder.daySeparator.setText(weekDays[0]);
                holder.daySeparator.setVisibility(View.VISIBLE);
                break;
            case 2:
                holder.daySeparator.setText(weekDays[1]);
                holder.daySeparator.setVisibility(View.VISIBLE);
                break;
            case 3:
                holder.daySeparator.setText(weekDays[2]);
                holder.daySeparator.setVisibility(View.VISIBLE);
                break;
            case 4:
                holder.daySeparator.setText(weekDays[3]);
                holder.daySeparator.setVisibility(View.VISIBLE);
                break;
            case 5:
                holder.daySeparator.setText(weekDays[4]);
                holder.daySeparator.setVisibility(View.VISIBLE);
                break;
            default:
                holder.daySeparator.setVisibility(View.GONE);
        }
    }
    holder.startTime.setText(scheduleItem.getStartTime());
    holder.endTime.setText(scheduleItem.getEndTime());
    holder.module.setText(scheduleItem.getModule());
    holder.lecturer.setText(scheduleItem.getLecturer());
    holder.moduleType.setText(scheduleItem.getModuleType());
    holder.room.setText(scheduleItem.getRoom());

    convertView.setEnabled(false);
    convertView.setOnClickListener(null);
    return convertView;
}

private static class ViewHolder {
    TextView startTime;
    TextView endTime;
    TextView module;
    TextView lecturer;
    TextView moduleType;
    TextView room;
    TextView daySeparator;
}
公共类ScheduleListAdapter扩展了BaseAdapter{
语境;
列出时间表项目;
放平机MLAYOUTIONFLATER;
字符串[]工作日;
公共ScheduleListAdapter(上下文mContext,列表scheduleItems){
this.mContext=mContext;
this.scheduleItems=scheduleItems;
mLayoutInflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
weekDays=mContext.getResources().getStringArray(R.array.schedule_days);
}
@凌驾
public int getCount(){
返回scheduleItems.size();
}
@凌驾
公共对象getItem(int位置){
返回scheduleItems.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
holder=新的ViewHolder();
convertView=MLAYOUTING FLATER.充气(R.layout.list\项目\计划,空);
holder.startTime=(TextView)convertView.findViewById(R.id.TextView_scheduleStartTime);
holder.endTime=(TextView)convertView.findViewById(R.id.TextView_scheduleEndTime);
holder.module=(TextView)convertView.findViewById(R.id.TextView\u scheduleModule);
holder.讲师=(TextView)convertView.findViewById(R.id.TextView\u schedule讲师);
holder.moduleType=(TextView)convertView.findViewById(R.id.TextView\u scheduleModuleType);
holder.room=(TextView)convertView.findViewById(R.id.TextView\u scheduleRoom);
holder.dayselector=(TextView)convertView.findViewById(R.id.TextView_scheduleDay);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
ScheduleItem ScheduleItem=scheduleItems.get(位置);
如果(位置==0){
开关(scheduleItem.getDayNumber()){
案例1:
holder.dayselector.setText(工作日[0]);
holder.dayselector.setVisibility(View.VISIBLE);
打破
案例2:
holder.dayselector.setText(工作日[1]);
holder.dayselector.setVisibility(View.VISIBLE);
打破
案例3:
holder.dayselector.setText(工作日[2]);
holder.dayselector.setVisibility(View.VISIBLE);
打破
案例4:
holder.dayselector.setText(工作日[3]);
holder.dayselector.setVisibility(View.VISIBLE);
打破
案例5:
holder.dayselector.setText(工作日[4]);
holder.dayselector.setVisibility(View.VISIBLE);
打破
违约:
holder.dayselector.setVisibility(View.GONE);
}
}
holder.startTime.setText(scheduleItem.getStartTime());
holder.endTime.setText(scheduleItem.getEndTime());
holder.module.setText(scheduleItem.getModule());
holder.讲师.setText(scheduleItem.get讲师());
holder.moduleType.setText(scheduleItem.getModuleType());
holder.room.setText(scheduleItem.getRoom());
convertView.setEnabled(false);
convertView.setOnClickListener(null);
返回视图;
}
私有静态类视图持有者{
文本视图开始时间;
文本视图结束时间;
文本视图模块;
TextView讲师;
TextView模块类型;
文本视图室;
文本视图日期分隔符;
}
}


谢谢;)

我在节目中也遇到了类似的问题。因此,我添加了一个else来重置任何设置,如颜色、背景或您案例中的分隔符

if (position == 0) {
    switch (scheduleItem.getDayNumber()) {
        case 1:
            holder.daySeparator.setText(weekDays[0]);
            holder.daySeparator.setVisibility(View.VISIBLE);
            break;
        case 2:
            holder.daySeparator.setText(weekDays[1]);
            holder.daySeparator.setVisibility(View.VISIBLE);
            break;
        case 3:
            holder.daySeparator.setText(weekDays[2]);
            holder.daySeparator.setVisibility(View.VISIBLE);
            break;
        case 4:
            holder.daySeparator.setText(weekDays[3]);
            holder.daySeparator.setVisibility(View.VISIBLE);
            break;
        case 5:
            holder.daySeparator.setText(weekDays[4]);
            holder.daySeparator.setVisibility(View.VISIBLE);
            break;
        default:
            holder.daySeparator.setVisibility(View.GONE);
    }
}else{//add code here to reset whatever you set
     holder.daySeparator.setVisibility(View.GONE);
}

谢谢你的时间,这对我很有帮助:)@enVGuy我也曾经遇到过这个问题,所以这就是我很乐意帮助你的原因。