android - ListView 删除项目时出现问题

标签 android listview android-listview

我是 Android 开发的新手,仍在学习一些技能,但我遇到了 ListView 和 ArrayAdapter 删除项目的问题。我一直在尝试大量示例并尽可能多地阅读 Material ,但我认为我可能遗漏了一些东西。对于我的生活,我无法让它在我的代码中工作。

如有任何帮助,我们将不胜感激。我已将代码包含在此处。

public class Favourites extends ListActivity implements OnClickListener {

private static final String TAG = "favourites";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.favourites);

    // Test list of strings- eventually to be replaced 
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
              "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
              "Linux", "OS/2" };

    // First paramenter - Context
    // Second parameter - Layout for the row
    // Third parameter - ID of the TextView to which the data is written
    // Forth - the Array of data
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);

    setListAdapter(adapter);
    ListView list = getListView();

    Log.d(TAG,"adapter count: " + adapter.getCount());

    // Define listView Long Click listener
    list.setOnItemLongClickListener(new OnItemLongClickListener() {         
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            String item = (String) getListAdapter().getItem(position);                    

            // Remove Item
            AlertDialog.Builder adb = new AlertDialog.Builder(Favourites.this);
            adb.setTitle("Delete?");
            adb.setMessage("Are you sure you want to remove " + item +" (" + position + ")");
            final int positionToRemove = position;
            final String removeItem = item;

            adb.setNegativeButton("Cancel", null);
            adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {        
                // *** Here is where I am experiencing issues ***
                adapter.remove(positionToRemove);
                adapter.notifyDataSetChanged(); 


                Toast.makeText(getApplicationContext(),
                      "Favourite "+ removeItem +" (" + positionToRemove + ") Removed!", Toast.LENGTH_LONG).show();
                }
             });
             adb.show();
             // Return true to consume the click event. In this case the
             // onListItemClick listener is not called anymore.  
             return true;
        }
    });

    // Close button
    View butClose = findViewById(R.id.closeButton);
    butClose.setOnClickListener(this);

    // Add button
    View butAdd = findViewById(R.id.addButton);
    butAdd.setOnClickListener(this);

}

最佳答案

您实际上并没有直接从适配器中删除。您必须先从 ArrayList 中删除,即您的数据。 所以,改变

adapter.remove(positionToRemove);
adapter.notifyDataSetChanged(); 

values.remove(positionToRemove);
adapter.notifyDataSetChanged(); 

关于android - ListView 删除项目时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13600018/

相关文章:

events - 所选项目的 ListView 事件已更改

Android:API 中的 bitmap.getByteCount() 小于 12

android - attrs.xml 中的错误

flutter - ListView 内列未正确展开

android - 我正在使用 Toast 在 ListViewItem 单击时显示,但没有显示 toast

android - 想要计算 ListView 项目并在每个 ListView 项目上显示计数器

android - 在可扩展 ListView 中切换组

android - 在 Viewpager 中使用具有相同 ViewModel 的相同 Fragment 的多个实例时出现问题

android - 调试 'app' 可以,但在 android studio 中无法运行 'app'

Android ListView - 项目准备好后如何执行代码?