在 Android 中删除 ListView 项目

Posted

技术标签:

【中文标题】在 Android 中删除 ListView 项目【英文标题】:Remove ListView items in Android 【发布时间】:2011-02-03 06:07:02 【问题描述】:

谁能给我一个删除所有 ListView 项目并替换为新项目的示例代码?

我尝试更换适配器项目但没有成功。我的代码是

populateList()

 results //populated arraylist with strings

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, results);

 listview.setAdapter(adapter);
 adapter.notifyDataSetChanged();
 listview.setOnItemClickListener(this);



// now populating list again

repopulateList()

 results1 //populated arraylist with strings

 ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, results1);

 listview.setAdapter(adapter1);
 adapter1.notifyDataSetChanged();
 listview.setOnItemClickListener(this);

这里repopulateList() 方法将添加到 ListView 项目,但它不会删除/替换所有 ListView 项目。

【问题讨论】:

【参考方案1】:

您将希望 remove() 来自适配器对象的项目,然后只需在适配器上运行 notifyDatasetChanged(),任何 ListViews 都将(应该)自行回收和更新。

这是一个简短的活动示例,AlertDialogs:

adapter = new MyListAdapter(this);
    lv = (ListView) findViewById(android.R.id.list);
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new OnItemClickListener() 
    public void onItemClick(AdapterView<?> a, View v, int position, long id) 
        AlertDialog.Builder adb=new AlertDialog.Builder(MyActivity.this);
        adb.setTitle("Delete?");
        adb.setMessage("Are you sure you want to delete " + position);
        final int positionToRemove = position;
        adb.setNegativeButton("Cancel", null);
        adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() 
            public void onClick(DialogInterface dialog, int which) 
                MyDataObject.remove(positionToRemove);
                adapter.notifyDataSetChanged();
            );
        adb.show();
        
    );

【讨论】:

MyDataObject 将是您的最终后备存储。大多数时候,您不仅想从 DISPLAYED 中删除项目,还想从某个数据库、某个服务器或某个文件存储中删除它们。 Esharp 只是提醒您,除了将其从显示中删除之外,您还需要记住真正删除数据。【参考方案2】:

我想如果你添加下面的代码,它会工作的

listview.invalidateViews();

要删除一个项目,只需从我们传递给适配器的数组列表中删除该项目并执行listview.invalidateViews(); 这将刷新列表视图

【讨论】:

【参考方案3】:

你可以使用

adapter.clear() 

这将删除您的第一个适配器的所有项目,然后您可以设置另一个适配器或重用适配器并将项目添加到旧适配器。如果你使用

adapter.add()

要将数据添加到您的列表中,您无需调用 notifyDataSetChanged

【讨论】:

从 BaseAdapter 扩展而来的 CustomAdapter 没有 clear()!【参考方案4】:
int count = adapter.getCount();
for (int i = 0; i < count; i++) 
 adapter.remove(adapter.getItem(i));

然后拨打notifyDataSetChanged();

【讨论】:

应该是adapter.remove(adapter.getItem(0)); adapter.remove(adapter.getItem(0)); 这只会删除第一个元素,但如果您想删除所有元素,请使用我发布的内容.. 伊什塔尔的评论是正确的。上面的代码将尝试删除列表末尾之后的项目。列表的每次迭代都会删除一项,因此当 i 等于 (count - 1) 时,您将拥有一个单项列表,并且 getItem(i) 将失败。 你可以用这种方式简单地从头到尾的项目: for (int i = count-1; i >= 0; i--) adapter.remove(adapter.getItem(i)) ; IndexOutOfRange 接近。【参考方案5】:

将其从适配器中移除,然后通知数组适配器数据集已更改。

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

【讨论】:

【参考方案6】:
            names = db.getSites();
            la = new ArrayAdapter<String>(EditSiteList.this,
                    android.R.layout.simple_list_item_1, names);
            EditSiteList.this.setListAdapter(la);
            listview.invalidateViews();

这段代码对我来说很好。

【讨论】:

【参考方案7】: 您应该只使用一个与您需要列出的数据列表绑定的适配器 当您需要删除和替换所有项目时,您必须使用“list.clear()”从数据列表中清除所有项目,然后使用“list.addAll(List)”添加新数据

这里是一个例子:

List<String> myList = new ArrayList<String>();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,       android.R.layout.simple_list_item_1, myList);
listview.setAdapter(adapter);
listview.setOnItemClickListener(this);

populateList()
   List<String> result = getDataMethods();

   myList.addAll(result);
   adapter.notifyDataSetChanged();


repopulateList()
   List<String> result = getDataMethods();

   myList.clear();
   myList.addAll(result);
   adapter.notifyDataSetChanged();

【讨论】:

【参考方案8】:

试试这个代码,它对我有用。

public class Third extends ListActivity 
private ArrayAdapter<String> adapter;
private List<String> liste;
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_third);
     String[] values = new String[]  "Android", "iPhone", "WindowsMobile",
                "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                "Linux", "OS/2" ;
     liste = new ArrayList<String>();
     Collections.addAll(liste, values);
     adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, liste);
     setListAdapter(adapter);

 @Override
  protected void onListItemClick(ListView l, View v, int position, long id) 
     liste.remove(position);
     adapter.notifyDataSetChanged();
  

【讨论】:

【参考方案9】:

首先,您应该从列表中删除该项目。稍后您可以清空适配器并用新列表重新填充它。

private void add(final List<Track> trackList) 
    MyAdapter bindingData = new MyAdapter(MyActivity.this, trackList);

    list = (ListView) findViewById(R.id.my_list); // TODO

    list.setAdapter(bindingData);


    // Click event for single list row
    list.setOnItemClickListener(new OnItemClickListener() 

        public void onItemClick(AdapterView<?> parent, View view,
                final int position, long id) 
            // ShowPlacePref(places, position);
            AlertDialog.Builder showPlace = new AlertDialog.Builder(
                    Favoriler.this);
            showPlace.setMessage("Remove from list?");
            showPlace.setPositiveButton("DELETE", new OnClickListener() 
                public void onClick(DialogInterface dialog, int which)     

                    trackList.remove(position); //FIRST OF ALL REMOVE ITEM FROM LIST
                    list.setAdapter(null); // THEN EMPTY YOUR ADAPTER

                    add(trackList); // AT LAST REFILL YOUR LISTVIEW (Recursively)

                

            );
            showPlace.setNegativeButton("CANCEL", new OnClickListener() 
                public void onClick(DialogInterface dialog, int which) 

                
            );
            showPlace.show();
        

    );


【讨论】:

【参考方案10】:

这很简单。首先你应该清除你的收藏,然后像下面的代码一样清除列表:

 yourCollection.clear();
 setListAdapter(null);

【讨论】:

【参考方案11】:

您还可以使用 listView.setOnItemLongClickListener 删除选定的项目。 下面是代码。

// listView = 您的 ListView 的名称

  listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() 
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int 
        position, long id) 

        // it will get the position of selected item from the ListView

final int selected_item = position;

            new AlertDialog.Builder(MainActivity.this).
                    setIcon(android.R.drawable.ic_delete)
                    .setTitle("Are you sure...")
                    .setMessage("Do you want to delete the selected item..?")
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        
                            list.remove(selected_item);
                            arrayAdapter.notifyDataSetChanged();
                        
                    )
                    .setNegativeButton("No" , null).show();

            return true;
        
    );

【讨论】:

【参考方案12】:

//试试这个:

字符串文本 = ((TextView) 视图).getText().toString(); 适配器.删除(文本);

【讨论】:

以上是关于在 Android 中删除 ListView 项目的主要内容,如果未能解决你的问题,请参考以下文章

android从listview中删除任何项目删除最后一个元素

在android studio中删除一个带有按钮的listview项目

Android:从 ListView/ArrayAdapter Activity 中删除项目

如何从android的listview中删除一个项目

使用android中的自定义arrayadapter在listview中使用复选框检查后如何删除多个项目?

Android:如何从 listView 和 arrayAdapter 中删除项目