2

我的布局文件中有一个列表视图和一个按钮。单击该按钮,我将项目添加到列表视图。活动开始时列表视图应该是空的,但它应该通过向其中添加项目来增长。这是我在 onCreate() 中的代码:

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

在这里,我将项目添加到单击按钮的列表视图中。

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

这工作正常。谁能指导我删除自定义列表视图项?提前致谢。

4

7 回答 7

7

如果您知道项目的位置,您可以这样做:

Object item = adapter.getItem(position);

adapter.remove(item);

adapter.notifyDataSetChanged();
于 2012-04-25T07:48:48.943 回答
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);
}

}

于 2012-04-25T07:49:03.627 回答
1

adapter.remove(item) .. 然后调用adapter.notifyDataSetChanged();

于 2012-04-25T07:48:35.807 回答
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)

否则,您将需要以其他方式获取该位置,例如将其(onItemClick 或 onItemLongClick)存储在带有 Visibility.GONE 的 textView 中,并在单击按钮时检索它(这很愚蠢,您可以使用各种存储选项,例如全局变量、数据库等)。

于 2013-08-08T00:22:17.033 回答
1

确保您已覆盖自定义适配器上的删除方法

例如,如果这是您的 add 方法:

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

那么您的删除方法将如下所示:

@Override
public void remove(String[] object) {
    scoreList.remove(object);
    super.remove(object);
}
于 2015-12-16T10:02:49.913 回答
0

调用以下两行::

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

其中inverterNo是你的项目

于 2012-04-25T07:49:14.030 回答
0

很容易;您只需要:在您的个性化适配器中添加一个公共方法:

public void remove(int position) {
    itemsMovieModelFiltered.remove(position);
    notifyDataSetChanged();
}

请记住,您必须在您的个性化适配器中添加此方法。然后,从其他地方调用这个方法

 adapte=new PersonalizeListAdapter(getActivity().getApplicationContext(),
            movieModelList);
adapte.remove(position);
于 2020-03-17T16:15:11.760 回答