【问题标题】:Deleting an Item from Listview by Clicking on ImageView widget通过单击 ImageView 小部件从 Listview 中删除项目
【发布时间】:2012-08-17 16:58:55
【问题描述】:

我正在尝试通过单击图片 (imageView) 从 ListView 中删除一个项目。我必须这样做,我已经设法通过单击项目本身来做到这一点,但对于这个项目,我不允许这样做。

我的适配器扩展了 BaseAdapter,我的 TaskListItem 扩展了相对布局 我正在使用自定义布局 xml。

protected void onFinishInflate() {
    super.onFinishInflate();
    textV = (TextView)findViewById(R.id.textViewTask);
    textP = ((TextView)findViewById(R.id.textPriority));
    textR = ((TextView)findViewById(R.id.textResponsible));

    imageD = ((ImageView)findViewById(R.id.imageDeleteTask));
    imageD.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            deleteTask();
            }
        });
    }

deleteTask() 方法:

protected void deleteTask() {
//MainActivity.adapter.clear(position)
Toast.makeText(getContext(), "Task Deleted", Toast.LENGTH_SHORT).show();
MainActivity.adapter.notifyDataSetChanged();    
    }

我的问题是可变位置。我找不到获取所选项目位置的方法(通过单击 imageView 小部件)。

最后,这是我的适配器代码。任何帮助将不胜感激:

public class TaskListAdapter extends BaseAdapter {

private ArrayList<Task> tasks;
private Context context;


public TaskListAdapter(ArrayList<Task> tasks, Context context) {
    super();
    this.tasks = tasks;
    this.context = context;
}

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

@Override
public Task getItem(int position) {
    return (null==tasks)? null: tasks.get(position);
}

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


@Override
public View getView(int position, View convertView, ViewGroup parent) {
         TaskListItem tli;
        Log.v("test","dasfsd");
    if (null == convertView) {
        tli = (TaskListItem)View.inflate(context, R.layout.task_list_item, null);

    }
        else {
        tli = (TaskListItem)convertView;
        }
    tli.setTask(tasks.get(position));
    return tli;
    }


public void forceReload() {
    notifyDataSetChanged();
}

public void clear(int position) {

    tasks.remove(position);

}

在 ImageView 上更新 OnClickListener 的代码

    public void setTask(final Task task) {
    this.task = task;
    //textV.set(task.isComplete());
    textV.setText(task.getName());
    textP.setText(task.getPriority());
    textR.setText(task.getResponsible());
    imageD.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {   
            // probably get position
            // deleteTask();
            MainActivity.adapter.notifyDataSetChanged();

            }
        });
}

protected void deleteTask() {
    int position=0;
    MainActivity.adapter.clear(position);
    Toast.makeText(getContext(), "Task Deleted", Toast.LENGTH_SHORT).show();
    MainActivity.adapter.notifyDataSetChanged();

    //testing  - problem cannot delete item. 
}

【问题讨论】:

  • 那么你是如何选择任务的?
  • 我在图片上有一个点击监听器检查更新代码

标签: android listview position adapter


【解决方案1】:

要获取位置,请将位置添加为视图标签

@Override
public View getView(int position, View convertView, ViewGroup parent) {
         TaskListItem tli;
        Log.v("test","dasfsd");
    if (null == convertView) {
        tli = (TaskListItem)View.inflate(context, R.layout.task_list_item, null);

    }else {
        tli = (TaskListItem)convertView;
    }
    tli.setTask(tasks.get(position)  , position);
    return tli;
}



public void setTask(final Task task , int position) {
    this.task = task;
    //textV.set(task.isComplete());
    textV.setText(task.getName());
    textP.setText(task.getPriority());
    textR.setText(task.getResponsible());
    imageD.setTag(new Integer(position));
    imageD.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {   
             int position = (Integer) v.getTag();
             deleteTask(position);
             MainActivity.adapter.notifyDataSetChanged();

            }
        });
}

protected void deleteTask(int position) {
    MainActivity.adapter.clear(position);
    Toast.makeText(getContext(), "Task Deleted", Toast.LENGTH_SHORT).show();
    MainActivity.adapter.notifyDataSetChanged();

    //testing  - problem cannot delete item. 
}

【讨论】:

  • 非常感谢...工作就像一个魅力..真的很感谢你们的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多