1

ImgaeViewを含むListItemがあります。画像またはアイコンがクリックされるたびにListItemを削除したい。これが私のListItemActivityです。アダプターのremoveメソッドを呼び出してListItemを削除するにはどうすればよいですか?参照に問題があります。もっと良い方法があれば教えてください。

public class TaskListItem extends LinearLayout {

    private Task task;
    private TextView taskName;
    private TextView responsible;
    private TextView priority;
    private ImageView bin;
    protected TaskListAdapter adapter;

    public TaskListItem(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        taskName = (TextView)findViewById(R.id.task_name);
        responsible = (TextView)findViewById(R.id.responsible);
        priority = (TextView)findViewById(R.id.priority);
        bin = (ImageView)findViewById(R.id.remove_task);        
    }

    public void setTask( final Task task) {
        this.task = task;
        taskName.setText(task.getName() + " ");
        //Set responsibility text
        responsible.setText("Resp: " + task.getReponsible());
        //Set priority text
        priority.setText(" Prio: " + task.getPiotiry());
        /*
         * onClickListener for image to delete
         */
        bin.setOnClickListener(new OnClickListener() {          
            public void onClick(View v) {
                **call the adapters remove method to delete this item with parameter (this).**  
            }
        });
    }

    public Task getTask() {
        return task;
    }

}
4

2 に答える 2

2

ListViewで非表示にしたい場合は、次を使用できます。

TaskListItem.this.setVisibility(View.GONE);

リストから削除する場合は、アダプターのデータソース内のこのアイテムの位置が必要になります。

アダプタのgetView()メソッドでonClickListenerを作成し、それをImageViewに割り当てることができます。次のようになります。

public class MyAdapter extends BaseAdapter{

    List<Task> mData = null;

  public MyAdapter(List<Task> dataSource){
    mData = dataSource;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
//    ... 
    final Tast task = getItem(position);
    TaskListItem listItem = new TaskListItem();
    listItem.setTask(task);
    listItem.bin.setOnClickListener(new OnClickListener(){
      public void onClick(View v) {
        mData.remove(task); // or mData.remove(position);
        // might need to call notifyDataSetChanged() depending on the adapter you're using
      }
     };
    return listItem;
    }
  }
于 2012-08-19T23:17:03.190 に答える
0

たとえば、list.setOnListItemClick()のコールバック内、またはListActivtiyのonListItemClick内など、リストを含むアクティビティからリストアイテムのクリックをキャッチする必要があります。

クリックイベントを取得したら、adapter.remove(index)を呼び出します。

于 2012-08-19T23:09:25.363 に答える