Java Android API ListView没有';t使用notifyDataSetChanged()时更新;
我很抱歉写下一个常见的问题,但我已经完成这项任务五个小时了,我干脆放弃了 我正在制作一个小型android应用程序,它现在应该做的就是保留一个小型SQLite数据库,并能够在上面编写/编辑注释。SQL一切正常,我的问题是ListView。无论我做什么,当我添加新便笺时,它都拒绝更新。查看新便笺的唯一方法是在另一个模式中进入编辑模式并返回时 以下是来源的相关部分:Java Android API ListView没有';t使用notifyDataSetChanged()时更新;,java,android,api,listview,Java,Android,Api,Listview,我很抱歉写下一个常见的问题,但我已经完成这项任务五个小时了,我干脆放弃了 我正在制作一个小型android应用程序,它现在应该做的就是保留一个小型SQLite数据库,并能够在上面编写/编辑注释。SQL一切正常,我的问题是ListView。无论我做什么,当我添加新便笺时,它都拒绝更新。查看新便笺的唯一方法是在另一个模式中进入编辑模式并返回时 以下是来源的相关部分: public class MainActivity extends Activity { ArrayAdapter<NoteI
public class MainActivity extends Activity {
ArrayAdapter<NoteItem> mAdapter;
public static NoteDataBase ndb;
ListView listView;
ArrayList a;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ndb = new NoteDataBase(this);
a = ndb.getAllNotes();
//LISTVIEW DO NOT TOUCH
/***********/ mAdapter = new ArrayAdapter<NoteItem>(this,
/***********/ android.R.layout.simple_list_item_1, a);
/***********/ listView = (ListView) findViewById(R.id.listView1);
/***********/ listView.setAdapter(mAdapter);
//*****************
}
//New Note button
public void newNoteAction(View view){
ndb.addNote(new NoteItem("Title", "Contents"));
a = ndb.getAllNotes();
mAdapter = new ArrayAdapter<NoteItem>
(this, android.R.layout.simple_list_item_1, a);
mAdapter.notifyDataSetChanged();
System.out.println(ndb.getAllNotes().size());
}
公共类MainActivity扩展活动{
ArrayAdapter mAdapter;
公共静态数据库ndb;
列表视图列表视图;
ArrayList a;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ndb=新的NoteDataBase(此);
a=ndb.getAllNotes();
//LISTVIEW不接触
/***********/mAdapter=新阵列适配器(此,
/***********/android.R.layout.simple_list_item_1,a);
/***********/listView=(listView)findViewById(R.id.listView1);
/***********/setAdapter(mAdapter);
//*****************
}
//新注释按钮
公共作废newNoteAction(视图){
ndb.添加注释(新注释项(“标题”、“内容”);
a=ndb.getAllNotes();
mAdapter=新阵列适配器
(这是android.R.layout.simple_list_item_1,a);
mAdapter.notifyDataSetChanged();
System.out.println(ndb.getAllNotes().size());
}
最后的打印只是为了看看它是否真的在创建新的便笺
我希望我提供了足够的信息,如果你还需要什么,请告诉我。我已经尝试了我读过的几乎所有内容,但在完成一项任务将近五个小时后,我会发疯的:)
谢谢
Shef您似乎想更新适配器,但实际上您正在创建一个新适配器。在这里,如果您只需再次调用
listView.setAdapter(mAdapter)
,它会将此新适配器设置为listView
,并且会正常工作
但是每次都创建一个新的适配器并不是一个好方法。因为您正在使用数据库,请尝试阅读。问题似乎在于您正在创建一个与
列表视图
无关的ArrayAdapter
的新实例并添加到该实例中
notifyDataSetChanged()
将向正在侦听的任何对象发送事件-列表视图正在侦听旧适配器。public void newNoteAction(视图){
public void newNoteAction(View view){
ndb.addNote(new NoteItem("Title", "Contents"));
// don't do this
// you are creating a new adapter and not binding it back to listview
// a = ndb.getAllNotes();
// mAdapter = new ArrayAdapter<NoteItem>(this, android.R.layout.simple_list_item_1, a);
mAdapter.add(new NoteItem("Title", "Contents"));
mAdapter.notifyDataSetChanged();
System.out.println(ndb.getAllNotes().size());
}
ndb.添加注释(新注释项(“标题”、“内容”);
//不要这样做
//您正在创建一个新适配器,而不是将其绑定回listview
//a=ndb.getAllNotes();
//mAdapter=newarrayadapter(这是android.R.layout.simple\u list\u item\u 1,a);
添加(新注释项(“标题”、“内容”);
mAdapter.notifyDataSetChanged();
System.out.println(ndb.getAllNotes().size());
}
您试图在哪个事件上添加新的注释,您能展示一下吗?这只是在活动的xml中定义的方法上。在xml中有一个名为noteNew的按钮,单击该按钮时,会调用NewNoteAction()。我使用的是android api 11。