2012-04-25 122 views
2

我在我的布局文件中有一个列表视图和一个按钮。我点击该按钮,将项目添加到列表视图。当活动开始时,listview应该是空的,但它应该通过向它添加项目而增长。 这是我里面的onCreate()代码:如何删除android中的自定义列表视图项目?

list = (ListView)findViewById(R.id.inverterListView); 
adapter = new ArrayAdapter<String>(InverterList.this, R.layout.inverters_list_row, R.id.inverterNumberTextViewInPanelListRow); 
list.setAdapter(adapter); 

这里IAM加入项目的onclick ListView控件按钮。

adapter.add(inverterNo); 
adapter.notifyDataSetChanged(); 

这工作正常。任何人都可以指导我删除自定义列表视图项目?提前致谢。

回答

7

如果你知道这个项目,你可以做到这一点的位置:

Object item = adapter.getItem(position); 

adapter.remove(item); 

adapter.notifyDataSetChanged(); 
+0

我添加了一些自定义适配器波纹管的代码...只是为了那些需要类似的人。 ListViews或多或少由开发人员定制,以使它们更美观。当发生这种情况时,事情会发生变化......查看答案。 – user1137313 2013-08-08 00:08:16

3

您可以编写自己的适配器扩展BaseAdapter并实现你所需要的方法。

这是我的例子适配器:

public class PeopleUserAdapter extends BaseAdapter 
{ 
private List<User> users; 
private int viewResourceId; 
private Context context; 

public PeopleUserAdapter(Context context, int viewResourceId) 
{ 
    this.context = context; 
    this.viewResourceId = viewResourceId; 
    this.users = new ArrayList<User>(); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    UserItemHolder holder; 
    if (convertView == null) 
    { 
     convertView = LayoutInflater.from(context).inflate(viewResourceId, parent, false); 
     holder = new UserItemHolder(convertView); 
    } 
    else holder = (UserItemHolder) convertView.getTag(); 

    User user = getItem(position); 
    holder.name.setText("@" + user.getLogin()); 
    return convertView; 
} 

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

@Override 
public User getItem(int position) 
{ 
    return users.get(position); 
} 

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

public void clear() 
{ 
    users.clear(); 
} 

public void addAll(Collection<User> users) 
{ 
    this.users.addAll(users); 
    notifyDataSetChanged(); 
} 

public void replace(Collection<User> users) 
{ 
    clear(); 
    addAll(users); 
} 

public static PeopleUserAdapter init(Context context) 
{ 
    return new PeopleUserAdapter(context, R.layout.item_user); 
} 

}

0

调用下面两行::

adapter.remove(inverterNo); 
adapter.notifyDataSetChanged(); 

其中inverterNo为您的项目

1

如果你是使用自定义适配器(对于自定义布局列表视图),您将需要执行此操作:

当你的适配器是这样的:

public class YourAdapterName extends ArrayAdapter<yourObject> 

然后删除选定的ListView项的代码将是:

ListView yourListView = (ListView) findViewById(R.id.listviewid); 
YourAdapterName adapter; 
adapter = (YourAdapterName) yourListView.getAdapter(); 
yourObject theitem = adapter.getItem(position); 
adapter.remove(theitem); 
adapte.notifyDataSetChanged(); 

这是假设你是让你访问一个事件中列表视图中的当前位置。像:

public boolean onItemLongClick(AdapterView<?> parent, View strings,int position, long id) 

public void onItemClick(AdapterView<?> arg0, View v, int position, long id) 

否则点击时,您将需要获得位置一些其他的方式,比如在Visibility.GONE一个TextView其存储(onItemClick或onItemLongClick),并检索它按钮(这很愚蠢,你可以使用各种存储选项,如全局变量,数据库等)。

+0

这适用于ArrayAdapter,但不能将泛型与BaseAdapter一起使用。 – 2014-07-24 06:13:00

1

确保您已经重写了remove方法您的自定义适配器上

例如,如果这是你的加入方法:

@Override 
public void add(String[] object) { 
    scoreList.add(object); 
    super.add(object); 
} 

那么你的删除方法会是这个样子:

@Override 
public void remove(String[] object) { 
    scoreList.remove(object); 
    super.remove(object); 
} 
相关问题