我正在尝试制作一个简单的列表,可以向其中添加新项目,删除和修改它们。列表的内容应保存在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,还是有一些我看不到的更简单的解决方案?
谢谢您的协助。
我认为您在将数据保存到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();
}
});
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。