从列表视图中删除项目,然后在每行按钮上单击它

时间:2012-01-14 05:53:41

标签: android listview

嗨我正在努力解决这个问题。我想在单击该行上的按钮时从列表视图中删除一个项目。

我试过了

holder.button.setText("End");
holder.button.setTag(position);
holder.button.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        Integer index = (Integer) v.getTag();
        app_details.remove(index.intValue());
        notifyDataSetInvalidated();
    }
});

但它的行为是不可预测的我的意思是当点击一行上的按钮时它会从列表视图中删除另一个项目。

任何人都有一些想法?

由于

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题&终于摆脱了它。必须尝试 holder.button.setOnItemClickListener按照步骤执行您想要的操作:

  1. 在您当前的活动类中实施OnItemClickListener
  2. 设置按钮,将列表视图中的项目删除为setOnClickListener
  3. 将列表视图设置为匿名内部类中的setOnItemClickListener侦听器(例如,在OnClickListener中)。
  4. notifyDataSetChanged()
  5. 再次使用 Intent 调用此活动
  6. 此处为示例:我采用一个列表视图listVw - >

    
    holder.button.setText("End");
    holder.button.setTag(position);
    holder.button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
           // your needed stuffs...
           listView.setOnItemClickListener(this);
        }
    });
    
      @Override
        public void onItemClick(AdapterView arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            //Do your stuff here... 
        }
    
    

答案 1 :(得分:0)

您希望使用ArrayAdapter的实例,因为该适配器具有remove方法。否则,您将需要实现自己的remove方法,并让您自定义适配器扩展BaseAdapter。下面是一个示例,说明需要调用哪些方法从列表中删除项目并告诉适配器刷新列表。

m_adapter.remove(o);
m_adapter.notifyDataSetChanged();

您想拨打notifyDataSetChanged()而不是notifyDataSetInvalidated()。这是差异......

notifyDataSetChanged() - 通知附加的观察者基础数据已被更改,反映数据集的任何视图都应自行刷新。

notifyDataSetInvalidated() - 通知附加的观察者基础数据不再有效或可用。