Android Listview未使用notifyDataSetChanged方法进行更新

Android Listview未使用notifyDataSetChanged方法进行更新,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,我试图用notifyDataSetChanged()这个方法更新我的listview,但是listview没有得到更新,如果我按“上一步”按钮并转到上一个活动,然后再按一次,如果我参加了这个活动,它就会得到更新,我不知道为什么。我尝试了所有可能的解决方案,但没有得到正确的解决方案。请帮助下面是我的代码 这里有一个我尝试过的链接 公共类分配扩展活动{ 列表视图; ImageView imageViewCrtAsnm; 字符串[]stg1; 列表名称2=空; 数据操纵器; 阵列适配器; @

我试图用notifyDataSetChanged()这个方法更新我的listview,但是listview没有得到更新,如果我按“上一步”按钮并转到上一个活动,然后再按一次,如果我参加了这个活动,它就会得到更新,我不知道为什么。我尝试了所有可能的解决方案,但没有得到正确的解决方案。请帮助下面是我的代码

这里有一个我尝试过的链接

公共类分配扩展活动{
列表视图;
ImageView imageViewCrtAsnm;
字符串[]stg1;
列表名称2=空;
数据操纵器;
阵列适配器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.assignment);
imageViewCrtAsnm=(ImageView)findViewById(R.id.createassignment);
mListView=(ListView)findViewById(R.id.displaydata);
imageViewCrtAsnm.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
意向意向=新意向(分配。本,
作业(创建类);
星触觉(意向);
}
});
mListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父项、视图项、,
最终整数位置,长id){
AlertDialog.Builder alertDialogBuilder=新建AlertDialog.Builder(
转让。本协议);
alertDialogBuilder.setTitle(“删除数据”);
alertDialogBuilder
.setMessage(“单击“是”删除记录!”)
.setCancelable(错误)
.setPositiveButton(“是”,
新建DialogInterface.OnClickListener(){
公共void onClick(对话框接口对话框,
int id){
String[]delete=names2.get(位置);
字符串idString=delete[0];
long idLong=long.valueOf(idString);
Log.d(“删除…”,idLong+”);
dataManipulator.delete(idLong);
名称2.移除(位置);
stg1=新字符串[names2.size()];
int x=0;
字符串stg;
对于(字符串[]名称:名称2){
stg=“Title:”+名称[1]+“\n”
+“描述:”+名称[2]
+“\n”+“还剩一天:”
+名称[3];
stg1[x]=stg;
x++;
}
adapter.notifyDataSetChanged();
}
})
.setNegativeButton(“否”,
新建DialogInterface.OnClickListener(){
公共void onClick(对话框接口对话框,
int id){
//如果单击此按钮,只需关闭
//打开对话框,不执行任何操作
dialog.cancel();
}
});
AlertDialog AlertDialog=alertDialogBuilder.create();
alertDialog.show();
}
});
DataManipular=新的DataManipular(此);
names2=DataManipular.selectAll();
stg1=新字符串[names2.size()];
int x=0;
字符串stg;
对于(字符串[]名称:名称2){
stg=“Title:“+name[1]+”\n“+”Descr:“+name[2]+”\n”
+“还剩一天:”+姓名[3];
stg1[x]=stg;
x++;
}
适配器=新阵列适配器(此,
android.R.layout.simple_list_item_1,stg1);
mListView.setAdapter(新阵列适配器)(此,R.layout.check,
stg1);
mListView.setAdapter(适配器);
adapter.notifyDataSetChanged();
}
}

删除数据时,您正在重新创建阵列。您是否也尝试过重新创建适配器以使用新阵列?

ArrayAdapter
制作一份您在构造函数中传递给它的项的副本,并在内部使用该副本

因此,简单地操纵原始数组对适配器来说毫无意义。您正在通知它数据已经更改,而它根本没有更改,它仍然保留您填充的原始列表

您需要重新创建整个adpater,或者使用
清除
添加所有
删除
插入
方法来操作数据


我找到了解决办法

只需使用onResume方法调用适配器类

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    names2 = dataManipulator.selectAll();

    stg1 = new String[names2.size()];
    int x = 0;
    String stg;

    for (String[] name : names2) {
        stg = "Title : " + name[1] + "\n" + "Descr : " + name[2] + "\n"
                + "Day's Left : " + name[3];
        stg1[x] = stg;
        x++;
    }

    adapter = new ArrayAdapter<String>(this, R.layout.assignment_custom,
            stg1);
    mListView.setAdapter(adapter);
    mListView.setCacheColorHint(Color.TRANSPARENT);
    mListView.setBackgroundResource(R.drawable.assignment_icon);
    adapter.notifyDataSetChanged();
    adapter.setNotifyOnChange(false);
    mListView.invalidateViews();
}
@覆盖
受保护的void onResume(){
//TODO自动生成的方法存根
super.onResume();
names2=DataManipular.selectAll();
stg1=新字符串[names2.size()];
int x=0;
字符串stg;
对于(字符串[]名称:名称2){
stg=“Title:“+name[1]+”\n“+”Descr:“+name[2]+”\n”
+“还剩一天:”+姓名[3];
stg1[x]=stg;
x++;
}
适配器=新阵列适配器(此,R.layout.assignment\u自定义,
stg1);
mListView.setAdapter(适配器);
mListView.setCacheColorHint(Color.TRANSPARENT);
mListView.setBackgroundResource(R.drawable.assignment_图标);
adapter.notifyDataSetChanged();
adapter.setNotifyOnChange(false);
mListView.invalidateViews();
}
只要在onResume方法中调用这部分代码,就完成了。但无论如何,感谢所有拥有h的人
@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    names2 = dataManipulator.selectAll();

    stg1 = new String[names2.size()];
    int x = 0;
    String stg;

    for (String[] name : names2) {
        stg = "Title : " + name[1] + "\n" + "Descr : " + name[2] + "\n"
                + "Day's Left : " + name[3];
        stg1[x] = stg;
        x++;
    }

    adapter = new ArrayAdapter<String>(this, R.layout.assignment_custom,
            stg1);
    mListView.setAdapter(adapter);
    mListView.setCacheColorHint(Color.TRANSPARENT);
    mListView.setBackgroundResource(R.drawable.assignment_icon);
    adapter.notifyDataSetChanged();
    adapter.setNotifyOnChange(false);
    mListView.invalidateViews();
}