Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从片段向数据库中插入值时,ListView未更新

从片段向数据库中插入值时,ListView未更新
EN

Stack Overflow用户
提问于 2019-10-13 12:42:28
回答 1查看 100关注 0票数 0

我使用BottomSHeetDialogfragment创建了一个底表,在按下保存按钮后,我的底单上有两个文本框和一个名为保存按钮的按钮,我的数据成功插入到sqlite数据库后,我的主活动上有一个列表视图,当按下保存按钮时,数据成功插入数据库,但列表视图没有自动更新插入的值。

现在,我如何自动更新我的列表视图?

我的适配器类是...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MainListViewAdapter extends BaseAdapter {

    Context context;
    ArrayList<String> taskList;
    ArrayList<String> detailList;

    LayoutInflater layoutInflater;

    public MainListViewAdapter(Context context, ArrayList<String> taskList, ArrayList<String> detailList) {
        this.context = context;
        this.taskList = taskList;
        this.detailList = detailList;
    }

    @Override
    public int getCount() {
        return taskList.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

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

        if (convertView == null) {
            layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.main_activity_list_view, parent, false);
        }

        TextView tasktitleTv = convertView.findViewById(R.id.list_item_title_tv_id);
        TextView taskDetailsTv = convertView.findViewById(R.id.list_item_detail_tv_id);
        final CheckBox checkBox = convertView.findViewById(R.id.list_item_checkbox_id);

        convertView.setClickable(true);
        convertView.setFocusable(true);
        convertView.setBackgroundResource(android.R.drawable.menuitem_background);


        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, ""+position, Toast.LENGTH_SHORT).show();
            }
        });

        tasktitleTv.setText(taskList.get(position));
        taskDetailsTv.setText(detailList.get(position));


        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    Toast.makeText(context, "Checked", Toast.LENGTH_SHORT).show();
                    taskList.remove(position);
                    detailList.remove(position);
                    MainListViewAdapter.this.notifyDataSetChanged();
                } else {
                    return;
                }
                if (isChecked) {
                    buttonView.toggle();
                }
            }
        });

        return convertView;
    }
}

我的mainActivity.java类是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MainActivity extends AppCompatActivity {

    private TextView taskHeaderTv;
    public ListView mainListview;
    private MainListViewAdapter mainListViewAdapter;

    private FloatingActionButton floatingActionButton;
    private BottomAppBar bottomAppBar;

    private DataBaseHelper dataBaseHelper;

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

        taskHeaderTv = findViewById(R.id.task_header_tv_id);
        floatingActionButton = findViewById(R.id.floating_action_button);
        bottomAppBar = findViewById(R.id.bottomAppBar);

        fabClick();
        bottomAppBarClick();

        // set list view content
        dataBaseHelper = new DataBaseHelper(this);
        ArrayList<String> taskList = dataBaseHelper.getAllTitle();
        ArrayList<String> detailList = dataBaseHelper.getALlDetails();

        mainListview = findViewById(R.id.main_activity_listview_id);
        mainListViewAdapter = new MainListViewAdapter(this, taskList, detailList);
        mainListview.setAdapter(mainListViewAdapter);

        mainListview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, position, Toast.LENGTH_SHORT).show();
            }
        });

        mainListViewAdapter.notifyDataSetChanged();

    }
}

我的片段类是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ListItemInputFragment extends BottomSheetDialogFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_list_item_input, container, false);

        final EditText newTaskEt, detailsEt;
        TextView savBtn;
        newTaskEt = view.findViewById(R.id.new_task_et_id);
        detailsEt = view.findViewById(R.id.details_et_id);
        savBtn = view.findViewById(R.id.save_btn_id);

        savBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String title = newTaskEt.getText().toString();
                String detail = detailsEt.getText().toString();

                DataBaseHelper dataBaseHelper = new DataBaseHelper(getContext());
                long row = dataBaseHelper.insertData(title, detail);

                if (row == -1) {
                    Toast.makeText(getActivity().getBaseContext(), "Data not inserted", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getActivity().getBaseContext(), "Data Inserted", Toast.LENGTH_SHORT).show();
                }

                dismiss();
            }
        });

        return view;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-10-13 13:31:35

由于onCreate只被称为已经创建的MainActivity (而不是在取消底盾之后),所以您可以在onResume中更新您的列表,该列表是在取消底盾之后调用的。

MainActivity

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
protected void onResume() {
    super.onResume();

    mainListViewAdapter.taskList = dataBaseHelper.getAllTitle();
    mainListViewAdapter.detailList = dataBaseHelper.getALlDetails();
    mainListViewAdapter.notifyDataSetChanged();
}

但是,我真的建议你去看看Android架构组件和房间。(https://developer.android.com/topic/libraries/architecture) MVVM (模型-视图-视图模型)与使用LiveData使您的生活变得更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58363676

复制
相关文章
pandas和spark的dataframe互转
由于pandas的方式是单机版的,即toPandas()的方式是单机版的,所以参考breeze_lsw改成分布式版本:
机器学习和大数据挖掘
2019/07/01
2.9K0
pandas dataframe 新增单列和多列
dataframe assign方法,返回一个新对象(副本),不影响旧dataframe对象
lovelife110
2021/01/14
4.3K0
pandas中的 fillna使用(pandas.DataFrame.fillna)「建议收藏」
3、将“A”、“B”、“C”和“D”列中的所有 NaN 元素分别替换为 0、1、2 和 3。
全栈程序员站长
2022/09/22
3.5K0
pandas中的 fillna使用(pandas.DataFrame.fillna)「建议收藏」
Pandas DataFrame显示行和列的数据不全
pd.set_option('display.max_columns', None)
用户7886150
2020/12/26
6.7K0
Python+Pandas逐行处理DataFrame中的某列数据(无循环)
创建一个包含10行6列随机数的DataFrame,行标签从大写字母A开始,列标签从小写字母u开始。然后从上向下遍历,如果某行u列的值比上一行u列的值大,就把该行x列的值改为上一行x列的值加1,否则保持原来的值不变。
Python小屋屋主
2023/08/29
4350
Python+Pandas逐行处理DataFrame中的某列数据(无循环)
Pandas 如何创建 DataFrame
我们已经知道了什么是 Series,在使用 Series 之前,我们得知道如何创建 Series。
用户7886150
2020/12/26
1.6K0
从DataFrame中删除列
在操作数据的时候,DataFrame对象中删除一个或多个列是常见的操作,并且实现方法较多,然而这中间有很多细节值得关注。
老齐
2021/03/29
7K0
pandas按行按列遍历Dataframe的几种方式
iterrows(): 按行遍历,将DataFrame的每一行迭代为(index, Series)对,可以通过row[name]对元素进行访问。 itertuples(): 按行遍历,将DataFrame的每一行迭代为元祖,可以通过row[name]对元素进行访问,比iterrows()效率高。 iteritems():按列遍历,将DataFrame的每一列迭代为(列名, Series)对,可以通过row[index]对元素进行访问。 示例数据
kirin
2021/04/30
7.1K0
(六)Python:Pandas中的DataFrame
        DataFrame与Series相比,除了可以每一个键对应许多值之外,还增加了列索引(columns)这一内容,具体内容如下所示:
小点点
2022/12/12
3.9K0
如何在 Pandas DataFrame中重命名列?
分析人员重命名列名称的动机之一是确保这些列名称是有效的Python属性名称。这意味着列名称不能以数字开头,而是带下画线的小写字母数字。好的列名称还应该是描述性的,言简意赅,并且不应与现有的DataFrame或Series属性冲突。
五分钟学大数据
2022/10/05
5.6K0
如何在 Pandas DataFrame中重命名列?
使用Pandas melt()重塑DataFrame
重塑 DataFrame 是数据科学中一项重要且必不可少的技能。在本文中,我们将探讨 Pandas Melt() 以及如何使用它进行数据处理。
deephub
2022/01/21
3K0
使用Pandas melt()重塑DataFrame
pandas中关于DataFrame行,列显示不完全(省略)的解决办法[通俗易懂]
有时候DataFrame中的行列数量太多,print打印出来会显示不完全。就像下图这样:
全栈程序员站长
2022/09/14
9.3K0
pandas中关于DataFrame行,列显示不完全(省略)的解决办法[通俗易懂]
如何遍历pandas当中dataframe的行
现在需要遍历上面DataFrame的行。对于每一行,都希望能够通过列名访问对应的元素(单元格中的值)。也就是说,需要类似如下的功能:
马哥Python
2019/06/27
4K0
数据分析-如何重命名Pandas DataFrame中的列名?
DataFrames和Series是用于数据存储的pandas中的两个主要对象类型:DataFrame就像一个表,表的每一列都称为Series。您通常会选择一个系列来分析或操纵它。今天我们将学习如何重命名Pandas DataFrame中的列名。
XXXX-user
2019/08/20
7.7K0
数据分析-如何重命名Pandas DataFrame中的列名?
Spark DataFrame
DataFrame是一种不可变的分布式数据集,这种数据集被组织成指定的列,类似于关系数据库中的表。SchemaRDD作为Apache Spark 1.0版本中的实验性工作,它在Apache Spark 1.3版本中被命名为DataFrame。对于熟悉Python pandas DataFrame或者R DataFrame的读者,Spark DataFrame是一个近似的概念,即允许用户轻松地使用结构化数据(如数据表)。
week
2018/12/07
9180
在pandas中遍历DataFrame行
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
用户7886150
2020/12/26
3.2K0
pandas | 如何在DataFrame中通过索引高效获取数据?
上篇文章当中我们简单介绍了一下DataFrame这个数据结构的一些常见的用法,从整体上大概了解了一下这个数据结构。今天这一篇我们将会深入其中索引相关的应用方法,了解一下DataFrame的索引机制和使用方法。
TechFlow-承志
2020/07/10
13.6K0
pandas | 如何在DataFrame中通过索引高效获取数据?
Pandas 修改单列,多列,Dataframe 数据类型方法汇总
文章目录 1.修改单列的数据类型 2.修改指定多列的数据类型 3.创建dataframe时,修改数据类型 4.读取时,修改数据类型 5.自动 1.修改单列的数据类型 import pandas as pd import numpy as np df = pd.read_csv('test.csv') df['column_name'] = df['column_name'].astype(np.str) print(df.dtypes) 2.修改指定多列的数据类型 import pandas as
白墨石
2021/01/13
6.7K0
pandas | DataFrame中的排序与汇总方法
今天是pandas数据处理专题的第六篇文章,我们来聊聊DataFrame的排序与汇总运算。
TechFlow-承志
2020/08/04
4.7K0
pandas | DataFrame中的排序与汇总方法
点击加载更多

相似问题

使用sslMode=verify的Openliberty连接失败

20

OpenLiberty - VisualVM

13

使用始终加密的特性时Server数据源连接失败

15

将OpenLiberty连接到RabbitMQ over JMS

14

在JMSToolbox上连接OpenLiberty应用程序

115
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文