【问题标题】:remove item onlongclick from listview从列表视图中删除项目 onlongclick
【发布时间】:2018-12-13 13:30:47
【问题描述】:

我希望在长按列表中的某个项目时提供一个选项删除,如果按下则删除该项目。

//onCreate()
alreadyAddedFood = (ListView) findViewById(R.id.alreadyAddedList);
registerForContextMenu(alreadyAddedFood); 

//END of onCreate()

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
{
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_general, menu);
    menu.setHeaderTitle("Select The Action");
}
@Override
public boolean onContextItemSelected(MenuItem item){
    if(item.getItemId()==R.id.delete){
          //How to delete?
        Toast.makeText(getApplicationContext(),"delete"+item,Toast.LENGTH_LONG).show();

    }else{
        return false;
    }
    return true;
}

更新

我也有这个类,我实现了 onlongClickListener,它工作正常,但没有让用户像下面的照片一样选择按删除

 public void alreadyAdded(String searchedMessage) {

        itemsAdded.add(searchedMessage);

        final ArrayAdapter<String>addedAdapter= new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,itemsAdded);
        alreadyAddedFood.setAdapter(addedAdapter);

     alreadyAddedFood.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
//            @Override
//            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
//                itemsAdded.remove(position);
//                addedAdapter.notifyDataSetChanged(); 
//                Toast.makeText(AddFood.this, "Item Deleted", Toast.LENGTH_LONG).show();
//                return true;
//            }
//        });
    }

【问题讨论】:

  • 看看这个解决方案:stackoverflow.com/questions/14340579/…
  • 您需要使用ARRAYLIST.remove(position); 删除项目,之后您需要使用notifyDataChange();
  • @RavindraKushwaha 我做到了(在其他功能上),但我也希望实现“删除”选项。我有什么办法可以按照你在“onContextItemSelected”方法中告诉我的吗?

标签: android listview


【解决方案1】:

将此添加到您的 onContextItemSelected 中:

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); // init the info to get the position from
items.remove(info.position); // remove the item from the list 
adapter.notifyDataSetChanged(); //updating the adapter

【讨论】:

    【解决方案2】:

    你可以这样做:

    private ListView ls;
     ls.setOnItemLongClickListener(new OnItemLongClickListener() {
    
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                    int arg2, long arg3) {
    
    
        ls.remove(arg2);//where arg2 is position of item you click
    myAdapter.notifyDataSetChanged();
                return false;
            }
        });
    

    【讨论】:

      【解决方案3】:

      您可以弹出一个对话框并要求用户确认。 然而,它的审美较少。我会推荐其中之一:

      1. 长按后,在应用栏中显示删除选项(使用删除图标而不是文本)。
      2. 不支持长按,而是在每行的右侧/左侧使用带有删除选项(同样,带有图标)的可滑动行。 (我会推荐this图书馆。

      (gif 取自here

      【讨论】:

      • 请仔细阅读他的要求,如果没有解决方案,您可以给他其他解决方案。
      猜你喜欢
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      相关资源
      最近更新 更多