Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android API ListView没有';t使用notifyDataSetChanged()时更新;_Java_Android_Api_Listview - Fatal编程技术网

Java Android API ListView没有';t使用notifyDataSetChanged()时更新;

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

我很抱歉写下一个常见的问题,但我已经完成这项任务五个小时了,我干脆放弃了

我正在制作一个小型android应用程序,它现在应该做的就是保留一个小型SQLite数据库,并能够在上面编写/编辑注释。SQL一切正常,我的问题是ListView。无论我做什么,当我添加新便笺时,它都拒绝更新。查看新便笺的唯一方法是在另一个模式中进入编辑模式并返回时

以下是来源的相关部分:

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。