【发布时间】:2014-02-09 18:32:44
【问题描述】:
当用户单击我的自定义行视图中的 X 按钮时,我目前正在尝试删除我的 listView 中的一行。可悲的是,当我尝试使用 remove() 函数时,它似乎不起作用。我可以不正确地设置 ListView 的数据类型吗?目前,它使用 2 个按钮和一个 ImageButton 扩展了一个线性布局。 ImageButton 是 X 按钮。这是适配器。它扩展了 Classes 对象的 arrayAdapter。 (他们只持有 2 个字符串)所以 new Classes("", ""); 我是否告诉删除函数删除位置 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;
}
【问题讨论】:
-
我认为删除不起作用,因为它没有找到您在方法 lastIndexOf 中传递的视图,该方法需要类并且您正在传递一个视图,您是否尝试过硬编码索引?
-
是的,我有。它仍然每次都删除最后一个视图。如果我输入 remove(0) ,它将删除最后一个位置。
-
没关系,问题是您在 findlastindex 方法中寻找一个按钮,您在数组中拥有的按钮列表是什么?因为 onclick 在视图中返回对单击按钮的引用
-
no..我是说如果我用 0 替换 lastIndexof(v) 它也不起作用。我可以删除的 lastIndexOf 。我只是把它扔在那里。我希望它删除我指定的位置。