我的布局文件中有一个列表视图和一个按钮。我点击该按钮将项目添加到listview。活动开始时列表视图应为空,但应通过向其添加项目来增加。 这是我在onCreate()中的代码:
list = (ListView)findViewById(R.id.inverterListView);
adapter = new ArrayAdapter<String>(InverterList.this, R.layout.inverters_list_row, R.id.inverterNumberTextViewInPanelListRow);
list.setAdapter(adapter);
这里iam将项目添加到listview,只需点击一下按钮。
adapter.add(inverterNo);
adapter.notifyDataSetChanged();
这很好用。任何人都可以指导我删除自定义列表视图项目?提前谢谢。
答案 0 :(得分:7)
如果你知道项目的位置,你可以这样做:
Object item = adapter.getItem(position);
adapter.remove(item);
adapter.notifyDataSetChanged();
答案 1 :(得分:3)
您可以编写自己的适配器extends 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);
}
}
答案 2 :(得分:1)
adapter.remove(item) ..然后拨打adapter.notifyDataSetChanged();
答案 3 :(得分: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),并在单击按钮时检索它(这很愚蠢,你可以使用各种存储选项,如全局变量,数据库等)。
答案 4 :(得分: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);
}
答案 5 :(得分:0)
拨打以下两行::
adapter.remove(inverterNo);
adapter.notifyDataSetChanged();
其中,inverseNo是你的物品
答案 6 :(得分:0)
很容易;您唯一需要的是:在您的个性化适配器中添加一个public方法:
public void remove(int position) {
itemsMovieModelFiltered.remove(position);
notifyDataSetChanged();
}
请注意,必须在个性化适配器中添加此方法。 然后,从其他位置调用此方法
adapte=new PersonalizeListAdapter(getActivity().getApplicationContext(),
movieModelList);
adapte.remove(position);