我想从列表视图中删除项目而不重新启动活动

i want to delete item from listview without restarting actitvity

我想通过长按列表视图项目来删除该项目。删除项目后,我需要重新启动 activity 才能看到更改,但我想立即看到更改

我已经尝试过 notifyDataSetChanged();但它不起作用我从sqlite数据库中获取数据并将其放入哈希图中并将其发送到自定义适配器 长按从数据库中删除一行,但列表视图中没有发生任何更改。

@Override
public View getView( final  int position, View convertView, ViewGroup parent) {
    View view = super.getView(position, convertView, parent);
    ImageView imageView = view.findViewById(R.id.detailsimage);
    CardView cardView = view.findViewById(R.id.detailcardView);
    TextView textmo =view.findViewById(R.id.detailsmo);
    TextView texttu =view.findViewById(R.id.detailstu);
    TextView textwe =view.findViewById(R.id.detailswe);
    TextView textth =view.findViewById(R.id.detailsthu);
    TextView  textfr =view.findViewById(R.id.detailsfri);
    TextView textsa =view.findViewById(R.id.detailssat);
    TextView textsu =view.findViewById(R.id.detailssun);

    final databasehandler db = new databasehandler(context);
    cardView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {

            db.deleteTitle(position+1);
            Toast.makeText(context,Integer.toString(position),Toast.LENGTH_SHORT).show();
            notifyDataSetChanged();

            return true;
        }
    });

    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            HashMap<String, String> hashmap= arrayList.get(position);
            String string= hashmap.get("repeat");
            string = Objects.requireNonNull(string).trim();


            Toast.makeText(context,string,Toast.LENGTH_SHORT).show();
        }
    });

    HashMap<String, String> hashmap= arrayList.get(position);
    String string= Objects.requireNonNull(hashmap.get("repeat")).trim();
   String[] separated = Objects.requireNonNull(string).split("");

                        }
            }}
 return view;
 }
}

将列表传递到适配器并更改此块

cardView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {

        db.deleteTitle(position+1);
        yourList.remove(position);
     Toast.makeText(context,Integer.toString(position),Toast.LENGTH_SHORT).show();
        notifyDataSetChanged();

        return true;
    }
});

好吧,您应该在自定义适配器中重新加载数据。根据您的描述,我了解到它不以任何方式与数据库绑定,所以您为什么期望它在调用 notifyDataSetChange() 后重新加载? notifyDataSetChange 当您在适配器中注册了实际的观察者时才有效。

查看 LoadersContent Providers 以便在您的 ListView 中自动反映数据库状态。这是 link - https://developer.android.com/guide/components/loaders

你不应该调用notifyDataSetChanged它会刷新整个列表,这会影响性能

cardView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        db.deleteTitle(position+1);
        yourArrayList.remove(position);
        Toast.makeText(context,Integer.toString(position),Toast.LENGTH_SHORT).show();
        notifyItemRemoved(position);
        return true;
    }
});

请创建自定义数组列表:-

List<Integer> al = new ArrayList<>(); 
    al.add("item 1"); 
    al.add("item 2"); 
    al.add("item 3"); 
    al.add("item 4"); 
    al.add("item 5");   

设置适配器:-

StableArrayAdapter adapter = new StableArrayAdapter(this,
            android.R.layout.simple_list_item_1, a1);
    listview.setAdapter(adapter);

从位置删除项目

al.remove(position); 

现在刷新列表视图适配器:-

adapter.notifyDataSetChanged();