Android 正在删除listView中的行,但未按预期工作

Android 正在删除listView中的行,但未按预期工作,android,listview,adapter,Android,Listview,Adapter,当前,当用户单击自定义行视图中的X按钮时,我正试图删除listView中的一行。遗憾的是,当我尝试使用remove()函数时,它似乎不起作用。我是否可以错误地设置ListView的数据类型?目前,它使用两个按钮和一个图像按钮对线性布局进行充气。ImageButton是X按钮。这是适配器。它扩展了类对象的arrayAdapter。(它们只包含2个字符串)所以新类(“,”)我是否告诉移除函数删除位置0、1、2等。这无关紧要。它将始终删除列表中的最后一个位置。我做错了什么 public Planner

当前,当用户单击自定义行视图中的X按钮时,我正试图删除listView中的一行。遗憾的是,当我尝试使用
remove()
函数时,它似乎不起作用。我是否可以错误地设置ListView的数据类型?目前,它使用两个按钮和一个图像按钮对线性布局进行充气。ImageButton是X按钮。这是适配器。它扩展了类对象的arrayAdapter。(它们只包含2个字符串)所以
新类(“,”)我是否告诉移除函数删除位置0、1、2等。这无关紧要。它将始终删除列表中的最后一个位置。我做错了什么

public PlannerListAdapter(Context context, ArrayList<String> rubric,
        SortedMap<String, String> currentTerms, ArrayList<String> termList, ArrayList<Classes> listItems) {
    super(context, R.layout.schedule_planner_list_item);

    this.context = context;
    this.rubricList = rubric;
    this.currentTerms = currentTerms;
    this.termList = termList;
    this.rubricList = rubric;
    courseHandler = new CourseHandler();
    courseDataTask = new GetCourseData();
    this.listItems = listItems;
    inflater = LayoutInflater.from(context);

}
static class ClassViewHolder {
    private Button rubric;
    private Button course;
    private ImageButton clearView;

    //pub constructor
    ClassViewHolder(Button rubric, Button course, ImageButton clearView) {
        this.rubric = rubric;
        this.course = course;
        this.clearView = clearView;
    }

    /**
     * @return the rubric
     */
    public Button getRubric() {
        return rubric;
    }
    /**
     * @param rubric the rubric to set
     */
    public void setRubric(Button rubric) {
        this.rubric = rubric;
    }
    /**
     * @return the course
     */
    public Button getCourse() {
        return course;
    }
    /**
     * @param course the course to set
     */
    public void setCourse(Button course) {
        this.course = course;
    }

    /**
     * @return the clearView
     */
    public ImageButton getClearView() {
        return clearView;
    }

    /**
     * @param clearView the clearView to set
     */
    public void setClearView(ImageButton clearView) {
        this.clearView = clearView;
    }
}


/* (non-Javadoc)
 * @see android.widget.ArrayAdapter#getCount()
 */
@Override
public int getCount() {
    // TODO Auto-generated method stub
    return listItems.size();
}



/* (non-Javadoc)
 * @see android.widget.ArrayAdapter#getItem(int)
 */
@Override
public Classes getItem(int position) {
    // TODO Auto-generated method stub
    return listItems.get(position);
}

/* (non-Javadoc)
 * @see android.widget.ArrayAdapter#getPosition(java.lang.Object)
 */
@Override
public int getPosition(Classes item) {
    // TODO Auto-generated method stub
    return listItems.indexOf(item);
}

public int getViewTypeCount() {
    return 1;
}


/* (non-Javadoc)
 * @see android.widget.ArrayAdapter#getView(int, android.view.View, android.view.ViewGroup)
 */
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
    final Button rubric;
    final Button course;
    final ImageButton clearView;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.schedule_planner_list_item, null);
        rubric = (Button)convertView.findViewById(R.id.rubric_spinner);
        course = (Button)convertView.findViewById(R.id.course_spinner);
        clearView = (ImageButton)convertView.findViewById(R.id.clear_courseRubric_view);
        convertView.setTag(new ClassViewHolder(rubric, course, clearView));
    }
    else {
        ClassViewHolder viewHolder = (ClassViewHolder)convertView.getTag();
        rubric = viewHolder.getRubric();
        course = viewHolder.getCourse();
        clearView = viewHolder.getClearView();
    }

    rubric.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            RubricArray = rubricList.toArray(RubricArray);
            //Toast.makeText(context, rubricList.get(0), Toast.LENGTH_SHORT).show();
            AlertDialog.Builder rubricDialog = new AlertDialog.Builder(context);
            rubricDialog.setTitle("Pick a Rubric");
            rubricDialog.setItems(RubricArray, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, final int which) {
                    RubricString = RubricArray[which];
                    rubric.setText(RubricString);
                    notifyDataSetChanged();
                    currentSubject = RubricString;
                    courseList.clear();
                    CourseArray = courseList.toArray(CourseArray);
                    courseDataTask.execute();
                    courseHandler = new CourseHandler();
                    courseDataTask = new GetCourseData();
                }
            });

            rubricDialog.show();
        }

    });
    course.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            AlertDialog.Builder courseDialog = new AlertDialog.Builder(context);
            courseDialog.setTitle("Pick a Course") ;
            courseDialog.setItems(CourseArray, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    CourseString = CourseArray[which];

                    course.setText(CourseString);
                    notifyDataSetChanged();
                }
            });

            courseDialog.show();

        }
    });

    clearView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            listItems.remove(listItems.lastIndexOf(v);
            notifyDataSetChanged();
        }
    });
    return convertView;
}
public PlannerListAdapter(上下文、ArrayList规则、,
SortedMap currentTerms、ArrayList TermsList、ArrayList listItems){
超级(上下文、右布局、进度计划、计划表、列表、项目);
this.context=上下文;
this.rubricList=rubric;
this.currentTerms=currentTerms;
this.termList=termList;
this.rubricList=rubric;
courseHandler=新courseHandler();
courseDataTask=新的GetCourseData();
this.listItems=listItems;
充气器=充气器。从(上下文);
}
静态类ClassViewHolder{
私人按钮标题;
私人按钮课程;
私有图像按钮clearView;
//发布构造函数
ClassViewHolder(按钮标题、按钮课程、图像按钮clearView){
this.rubric=rubric;
本课程=课程;
this.clearView=clearView;
}
/**
*@返回标题
*/
公共按钮getRubric(){
返回量规;
}
/**
*@param rubric要设置的量规
*/
公共空白设置准则(按钮准则){
this.rubric=rubric;
}
/**
*@返回球场
*/
公共按钮getCourse(){
返回路线;
}
/**
*@param-course要设置的航向
*/
公共课程(按钮课程){
本课程=课程;
}
/**
*@返回clearView
*/
公共图像按钮getClearView(){
返回clearView;
}
/**
*@param clearView要设置的clearView
*/
公共无效setClearView(图像按钮clearView){
this.clearView=clearView;
}
}
/*(非Javadoc)
*@see android.widget.ArrayAdapter#getCount()
*/
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回listItems.size();
}
/*(非Javadoc)
*@see android.widget.ArrayAdapter#getItem(int)
*/
@凌驾
公共类getItem(int位置){
//TODO自动生成的方法存根
返回listItems.get(位置);
}
/*(非Javadoc)
*@see android.widget.ArrayAdapter#getPosition(java.lang.Object)
*/
@凌驾
公共int getPosition(类项目){
//TODO自动生成的方法存根
返回listItems.indexOf(项目);
}
public int getViewTypeCount(){
返回1;
}
/*(非Javadoc)
*@see android.widget.ArrayAdapter#getView(int,android.view.view,android.view.ViewGroup)
*/
@凌驾
公共视图getView(最终整型位置、视图转换视图、最终视图组父视图){
最终按钮量规;
最后的按钮课程;
最终图像按钮clearView;
if(convertView==null){
convertView=充气机。充气(R.layout.schedule\u planner\u list\u item,空);
rubric=(按钮)convertView.findViewById(R.id.rubric\u微调器);
course=(按钮)convertView.findViewById(R.id.course\u微调器);
clearView=(ImageButton)convertView.findViewById(R.id.clear\u courseRubric\u视图);
setTag(新的类视图持有者(rubric、course、clearView));
}
否则{
ClassViewHolder viewHolder=(ClassViewHolder)convertView.getTag();
rubric=viewHolder.getRubric();
course=viewHolder.getCourse();
clearView=viewHolder.getClearView();
}
rubric.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
RubricArray=rubricList.toArray(RubricArray);
//Toast.makeText(上下文,rubricList.get(0),Toast.LENGTH_SHORT.show();
AlertDialog.Builder rubricDialog=新建AlertDialog.Builder(上下文);
rubricDialog.setTitle(“选择一个量规”);
rubricDialog.setItems(RubricArray,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,final int which){
RubricString=RubricArray[which];
rubric.setText(RubricString);
notifyDataSetChanged();
currentSubject=RubricString;
courseList.clear();
CourserRay=courseList.toArray(CourserRay);
courseDataTask.execute();
courseHandler=新courseHandler();
courseDataTask=新的GetCourseData();
}
});
rubricDialog.show();
}
});
course.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
AlertDialog.Builder courseDialog=新建AlertDialog.Builder(上下文);
courseDialog.setTitle(“选择课程”);
setItems(CourserRay,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
CourseString=CourseArray[哪个];
course.setText(CourseString);
notifyDataSetChanged();
}
});
courseDialog.show();
}
});
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
listItems.remove(listItems.lastIndexOf(v);
notifyDataSetChanged();
}
});
返回视图;
}

因为我没有足够的声誉来评论你的问题,所以我写了
listItems.remove(position); then, 
notifyDataSetChanged(); 
or you can also use
listview.invalidateViews();
add this line in (convertView == null) {} block.
clearView.setTag(position); then,

clearView.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        listItems.remove(v.getTag());
        notifyDataSetChanged();
    }
});