当前位置: 首页 > 知识库问答 >
问题:

从列表视图中删除行后刷新片段

胥诚
2023-03-14

我设法创建了一个自定义列表视图,并为每一行添加了一个删除按钮。删除按钮运行良好,当我单击按钮时,该行会从数据库中删除。问题是,当我删除一行时,它会保留在列表中,直到我通过移动到另一个片段来刷新片段并返回,然后它从列表中消失。我想要的是,当我删除一行时,它会立即从列表视图中消失。我尝试了一些解决方案来刷新整个片段或删除完成后的列表视图,但它们不起作用!

这是我为适配器类中的删除按钮编写的代码

public View getView(final int position, View convertView, ViewGroup parent) {

        View theView = super.getView(position, convertView, parent);     // It took me three days to fix :) I posed a question for it in StackOverFlow
        Button deleteButt = (Button) theView.findViewById(R.id.deleteButton);
        deleteButt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                // This code to delete a row from the class Orders was taken from Back4app help https://www.back4app.com/docs/android/parse-objects/crud
                ParseQuery<ParseObject> query = ParseQuery.getQuery("Orders");
                query.whereEqualTo("objectId", mainObjectsArray.get(position)[3]);  // mainObjectsArray.get(position)[3] We fetched the object id and stored it in mainObjectArray. position is the position of the item in the list which is the same position of the the same item in the mainObjectArray. Smart isn't it?! :)
                query.findInBackground(new FindCallback<ParseObject>() {
                    @Override
                public void done(final List<ParseObject> object, ParseException e) {
                    if (e == null) {

                        // The dialog 
                        AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                        alert.setMessage("Are you sure you want to delete this order?")
                                .setNegativeButton("No", null)
                                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {

                                        //Delete based on the position
                                        object.get(0).deleteInBackground(new DeleteCallback() {
                                            @Override
                                            public void done(ParseException e) {
                                                if (e == null) {
                                                    Toast.makeText(getActivity(), "Deleted!", Toast.LENGTH_SHORT).show();
                                                    
                                                } else {
                                                    Toast.makeText(
                                                            getApplicationContext(),
                                                            e.getMessage().toString(),
                                                            Toast.LENGTH_LONG
                                                    ).show();
                                                }
                                            }
                                        });

                                    }
                                        });

                        alert.create().show();


                    } else {
                        Toast.makeText(
                                getApplicationContext(),
                                e.getMessage().toString(),
                                Toast.LENGTH_LONG
                        ).show();
                    }
                };
            });

            }
        });

        return theView;
    }

之后

Toast.makeText(getActivity(), "Deleted!", Toast.LENGTH_SHORT).show();

我应该编写一段代码来刷新片段,以便从数据库中获取新数据。将寻求任何帮助!非常感谢。

共有2个答案

严俊友
2023-03-14

删除订单后,只需从适配器列表中删除订单并通知适配器即可。

刘胜泫
2023-03-14

单击删除按钮后,立即从适配器列表中删除该项目并使用通知DataSetChanged(),它将更新您的列表项目。您不需要为此更新完整片段。

编辑:-您可以使用<code>notifyItemRemoved()</code>而不是使用<code>notifyDataSetChanged()</code>来更新整个recyclerView,这是一项繁重的操作。在这里,您可以找到有关<code>notifyItemRemoved()</code>的更多详细信息。

 类似资料:
  • 问题内容: 从视图中删除一行,是否会从创建该视图的基表中删除相应的行?我正在使用MySQL。 问题答案: 是的,它会的。唯一需要注意的是权限。 引用官方文档 有些观点是可更新的。也就是说,您可以在诸如UPDATE,DELETE或INSERT之类的语句中使用它们来更新基础表的内容。为了使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。还有某些其他构造会使视图不可更新。

  • 本文向大家介绍从视图中删除行会从MySQL的基表中删除行吗?,包括了从视图中删除行会从MySQL的基表中删除行吗?的使用技巧和注意事项,需要的朋友参考一下 是的,从视图中删除行从基表中删除行。让我们通过创建一个新表来了解这一点。创建表的查询如下 使用insert命令在表中插入一些记录。查询如下- 使用select语句显示表中的所有记录。查询如下- 以下是输出 让我们创建一个视图。创建视图的查询如下

  • 我使用两个JavaFX Timeline对象在ListCell中创建一个倒计时计时器和一个进度条(即缩小的JavaFX矩形)。当计时器达到零时,矩形的宽度变为零,单元格将从ListView中删除。但是,整个ListView会自动刷新,导致另一个单元格中的时间线重置。以下是从两个单元格开始的情况: 在代码中,updateItem方法从模型中获取秒数,并设置计时器标签的文本。从ListView中删除单

  • 问题内容: 我搜索了许多看起来像这样的问题,但没有找到我的答案。 我有一个活动,该活动具有3个可通过操作栏访问的选项卡。我通过添加3个片段来实现这一点,这些片段使我自定义视图扩展了视图类。 在数据库更改的那一刻,我尝试通过调用invalidate()/ postinvalidate()刷新选项卡中的视图,但这不起作用。正如我考虑的其他许多选项一样,调用片段的onCreateView也是如此。 但是

  • 我的任务:我必须从jsp视图中删除对表“testtable”的每一行操作。 后端MySQL:=我有两个表一个“userinfo”用于aurtherntication,另一个表“testtable”。 对于两个表连接,我使用了jsp中的隐藏字段输入,而不是使用外键关系。 在控制台打印中,我们可以在单击delete按钮后看到com.mysql.jdbc.jdbc4PreparedStatement@1

  • 我有recyclerview,每行包含一个项目列表和一个按钮。单击按钮时,我希望删除整行并自动更新列表。 下面是我的适配器类代码: 此代码有效,项目将被删除。但是,列表不会更新,直到我再次访问该活动。如何立即更新视图?