0

画像 (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. 
}
4

1 に答える 1

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. 
}
于 2012-08-17T18:13:25.753 に答える