【问题标题】:Android ListView Removing Item on clickAndroid ListView 点击时删除项目
【发布时间】:2015-07-17 17:30:41
【问题描述】:

当我单击所选项目时,我试图从列表中删除一个项目,但我在 logcat 上收到一个错误,指出 AddapterView 不支持 removeViewAt 方法。知道我可以在这里使用什么来实现这一目标吗?

非常感谢。 这是我的代码。

 listView.setOnItemClickListener(new OnItemClickListener()
        {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int  position, long id)
        {
            listView.removeViewAt(position);
            listView.invalidateViews();

        }
    });
}

【问题讨论】:

  • 你是否使用arraylist来填充listview
  • String Array mate : String[] Listitems.
  • Remove item from listview 的可能重复项

标签: android android-listview


【解决方案1】:

试试这个:

ArrayList<String> arrlist=new ArrayList<String>();
arrlist.add("A");
arrlist.add("B");
arrlist.add("C");
arrlist.add("D");

ListView listView = (ListView) findViewById(R.id.mylist);
String[] items = { "Milk", "Butter", "Yogurt", "Toothpaste", "Ice Cream" };

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

listView.setOnItemClickListener(new OnItemClickListener()
    {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int  position, long id)
    {
        items.remove(position);
        adapter.notifyDataSetChanged();
    }
 });
}

【讨论】:

  • 您不能将 remove 与 String[] 一起使用。
  • 这样删除:String[] str_array = {"item1","item2","item3"}; List list = new ArrayList(Arrays.asList(str_array)); list.remove("item2"); str_array = list.toArray(new String[0]);
  • 我明白你的意思,但我的 string[] 上出现错误,说它不能被分配,因为它是在封闭类型中定义的。有什么想法吗?
  • 那么使用ArrayList是最好的使用方式,而不是String[]
【解决方案2】:

这会使用动画淡化被点击的项目,需要API level 16

   private List<String> myList;
    File file;

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

        ListView listView = (ListView) findViewById(R.id.listerX);
        myList = new ArrayList<String>();

        File directory = Environment.getExternalStorageDirectory();
        file = new File( directory + "/myAppCache/" );
        File list[] = file.listFiles();

        for( int i=0; i< list.length; i++)
        {
            myList.add( list[i].getName() );
        }
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, final View view,
                                    int position, long id) {
                final String item = (String) parent.getItemAtPosition(position);
                view.animate().setDuration(2000).alpha(0)
                        .withEndAction(new Runnable() {
                            @Override
                            public void run()
                            {
                                Toast.makeText(getApplicationContext(), ""+item,
                                        Toast.LENGTH_LONG).show();


                            }
                        });
            }
        });

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

        listView.setAdapter(adapter); //Set all the file in the list.
    }

【讨论】:

  • 不错的是可以删除线,而不仅仅是淡出吗?
【解决方案3】:

您正在使用任何数组或集合项填充列表 然后在单击位置的位置删除项目。 现在通过调用 adapter.notifydatasetchange(); 通知适配器; 享受您的代码

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多