【问题标题】:Remove ListView items after 3 clicks单击 3 次后删除 ListView 项目
【发布时间】:2017-07-13 11:32:15
【问题描述】:

如何从 Android 上的 ListView 中删除 ListView 项目?
但是,我想在删除之前将每个项目的点击设置为 3。
因此,如果第一个位置的项目被点击一次,第二个项目被点击两次,在第一个项目点击达到 3 之前不要删除任何项目。然后只删除该项目,对于 ListView 中的其他项目,每个项目都必须被点击 3次。

listi.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,final int position, long id) {
        final PopupMenu pop = new PopupMenu(Danger.this, listi);
        pop.getMenuInflater().inflate(R.menu.menu_location, pop.getMenu());
        pop.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()) {

                    case R.id.Remove:


                        items.remove(position);

                }//swithc
                return false;

【问题讨论】:

标签: java android listview arraylist android-menu


【解决方案1】:

创建一个整数的 ArrayList 并使用与列表视图的相同元素计数和设置列表中所有元素的值 = 0 完全相同的元素对其进行初始化

ArrayList<integers> counterList = new Arraylist();
for(int i = 0; i < listi.getAdapter.getChildrenCount(); i++){ // get total elements in adapter
    counterList.add(0); // set each element of array list to 0
}

那么这里:

listi.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,final int position, long id) {
    final PopupMenu pop = new PopupMenu(Danger.this, listi);
    pop.getMenuInflater().inflate(R.menu.menu_location, pop.getMenu());
    pop.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {

                case R.id.Remove:
                   if(counterList.get(position) >= 2){

                       items.remove(position); // remove current position item from arraylist adapter and notify data set changed
                       counterList.remove(position); // remove the current position element from counter list too
                   } else {
                        counterList.set(position, counterList.get(position) + 1); // if 3 clicks have not happened then increase the counter.
                   }

            }//swithc
            return false;

【讨论】:

  • 你输入了notifyDataSetChanged(); ?
  • 删除项目后输入 notifyDataSetChanged。
  • 我用适配器设置了它,但应用程序崩溃了
  • 崩溃日志是什么?
  • 将再次为您的代码添加广告并尝试最简单的方法
【解决方案2】:

使用静态变量并保持为null,将静态变量包含在ClickListener中,一旦变量达到3,您可以从列表视图中删除项目

【讨论】:

  • 你可以添加静态变量并查看它..当它达到3时,删除该项目
【解决方案3】:

我建议添加 2 个字段:int timesClickedint lastItemId,然后在您的 onMenuItemClick 方法中,检查是否需要删除 Item:

int timesClicked = 0;
int lastItemId;
...
@Override
public boolean onMenuItemClick(MenuItem item) {
    if(item.getItemId() == lastItemId) {
        if(timesClicked == 3) {
            timesCliked == 0;
            items.remove(item);
        } else timesClicked++;
    } else {
        lastItemId = item.getItemId();
        timesClicked = 0;
    }
}

这应该可行。

【讨论】:

  • 谢谢你,当我点击 4 次应用程序崩溃时,我已经添加了你的代码,但谢谢我会尝试从你写的内容中获取逻辑
  • 嗯,一旦项目被删除,您应该无法单击它。可能必须更新您的列表视图。尝试将其设置为不可见然后再次可见,我使用了几次解决方法。
  • 谢谢你的代码有意义会试着理解你做了什么
【解决方案4】:

创建一个 bean (Model) 类,用于根据 他们相应的位置,每次点击项目时首先检查 如果该项目返回 2,则单击该项目多少次然后删除该项目 否则不。

【讨论】:

  • 感谢 bean 模型不知道的要研究一下
  • 工作量很大,因为我的清单上有很多项目,也不知道如何在逻辑上实现它,谢谢,但我知道 getter 和 setter
猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多