开发者社区> 问答> 正文

ListView不刷新数据库中的内容

我正在尝试制作一个简单的列表,可以向其中添加新项目,删除和修改它们。列表的内容应保存在SQLite中。我的问题如下:当我添加新项目时,列表没有刷新,并且该项目仅在退出应用程序后才出现,然后再次打开它。我找到了一种解决方法,但它很笨拙,不能完全正常工作。

public class MainActivity extends AppCompatActivity {
    SaveClass save = new SaveClass(this);
    private ListView mShoppingList;
    private EditText mItemEdit;
    private Button mAddButton;
    private ArrayAdapterElem mAdapter;
    List<ItemList> elemek;



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

        mAdapter = new ArrayAdapterElem(this, elemek);
        mShoppingList = findViewById(R.id.shopping_listView);
        mItemEdit = (EditText) findViewById(R.id.item_editText);
        mAddButton = (Button) findViewById(R.id.add_button);
        mShoppingList.setAdapter(mAdapter);


        mAddButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ItemList item = new ItemList(mItemEdit.getText().toString());
                mItemEdit.setText("");
                save.addElem(item);
                mAdapter.add(item);
                mAdapter.notifyDataSetChanged();
            }
        });

这是我的自定义ArrayAdapter类:

public class ArrayAdapterElem extends ArrayAdapter<ItemList> {

    private int elem;

    public ArrayAdapterElem(Context context, List<ItemList> elemek) {
        super(context, 0, elemek);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ItemList elem = getItem(position);
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.lista_elem, parent, false);
        }
        TextView elemnev = (TextView) convertView.findViewById(R.id.Elem);

        if (elem.checked == true) {
            elemnev = (TextView) convertView.findViewById(R.id.Elem);
            elemnev.setTextColor(Color.GRAY);
            elemnev.setPaintFlags(elemnev.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
        }
        else
        {
            elemnev.setTextColor(Color.BLACK);
            elemnev.setPaintFlags(elemnev.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
        }

        elemnev.setText(elem.listaElem);

        return convertView;
    }

}

现在,我将项目保存在SQLite中,然后将其手动添加到ListView中。我知道这意味着数据库中的新对象与列表中的对象不相同,因此我的修改对保存的项目不起作用,直到我重新加载应用程序以从数据库中获取对象。因此,我想为此找到更好的解决方案。如果仅将项目保存在数据库中,然后在适配器上调用notifyDataSetChanged()方法,则它不会从数据库中刷新列表中的项目。我应该在自定义ArrayAdapter类中实现notifyDataSetChanged,还是有一些我看不到的更简单的解决方案?

谢谢您的协助。

展开
收起
垚tutu 2019-11-28 19:25:25 1012 0
1 条回答
写回答
取消 提交回答
  • #include

    我认为您在将数据保存到SaveClass对象时不会更新附加的数据列表。如果我的理解正确,请尝试以下操作。

    如下所述编辑您的mAddButton单击侦听器。

    mAddButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ItemList item = new ItemList(mItemEdit.getText().toString());
                    mItemEdit.setText("");
                    save.addElem(item);
                    mAdapter.add(item); // this line might not required.
                    elemek.add(item);
                    mAdapter.notifyDataSetChanged();
    
           }
        });
    
    2019-11-28 19:25:38
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载