java - ListView 不刷新数据库中的内容
问题描述
我正在尝试制作一个简单的列表,能够向其中添加新项目、删除和修改它们。列表的内容应该保存在 SQLite 中。我的问题如下:当我添加一个新项目时,列表没有刷新,并且该项目只有在我退出应用程序后才会出现,然后再次打开它。我找到了一个解决方法,但它很hacky并且不能完全工作.
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,还是有一些我看不到的更简单的解决方案?
感谢您提前提供的任何帮助。
解决方案
您可以像这样
在适配器类中实现相同的方法
public class ArrayAdapterElem extends ArrayAdapter<ItemList> {
private int elem;
private List<ItemList>arraylist;
public ArrayAdapterElem(Context context, List<ItemList> elemek) {
super(context, 0, elemek);
}
public void updateList(List<ItemList> list){
this.arraylist = list;
notifyDataSetChanged();
}
在你的 onclick 监听器中
mAddButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ItemList item = new ItemList(mItemEdit.getText().toString());
mItemEdit.setText("");
save.addElem(item);
adapter.updateList(save.getAllItems());
}
});
推荐阅读
- javascript - OnError 未显示默认图像
- android - RxJava如何测试去抖动?
- odoo - odoo 允许现有用户使用谷歌登录进行注册
- python - 如何在 Python 中增量打印字符串中的字符
- css - Angular 材质和自定义主题
- python - 输出顺序随运行而变化
- spring-boot - 入口控制器不是基于 openshift 中的路径进行路由
- java - NoSuchMethodError:io.swagger.jaxrs.config.BeanConfig.setUsePathBasedConfig(Z)V
- excel - 更改形状中的字体颜色
- mysql - MySql - 如何获取最后一个 ALTER TABLE 的日期时间?