Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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 从另一个类更新ListView项_Java_Android - Fatal编程技术网

Java 从另一个类更新ListView项

Java 从另一个类更新ListView项,java,android,Java,Android,当我试图更新我的listview值时,我遇到了一个问题。我有一个由编辑文本组成的自定义适配器。当我点击一个编辑文本时,我会显示一个对话框(在另一个类中),并向他传递相同的值,如position、arralist和other 在dialog类中,我使用了这个方法 public void updateValue(String newValue) { MyObject object = arrayList.get(position); object.valueFile = ne

当我试图更新我的
listview
值时,我遇到了一个问题。我有一个由编辑文本组成的自定义适配器。当我点击一个编辑文本时,我会显示一个对话框(在另一个类中),并向他传递相同的值,如position、arralist和other

在dialog类中,我使用了这个方法

public void updateValue(String newValue) {
    MyObject object = arrayList.get(position);
        object.valueFile = newValue;
    arrayList.set(position, object);
    MyAdapter adapter = new MyAdapter(context, 0, arrayList);
    adapter.notifyDataSetChanged();
}
此方法之所以有效,是因为新值已正确插入到数组列表中,但编辑文本的文本未更新,但仅在滚动时更新,然后返回到该编辑文本。为什么?我该怎么修理?问题出在哪里?

您不能在第二次使用新的()适配器。适配器只能新建()一次
如果要更新listview,则需要更新arrayList中的数据

ArrayList<yourType> arrayList = new ArrayList<yourType>();
//Init data for your arrayList
//...
//Init your adapter
MyAdapter adapter = new MyAdapter(context, 0, arrayList);

//update item of listview
public void updateValue(String newValue) {
    arrayList.get(position).valueFile = newValue;
    adapter.notifyDataSetChanged();
}
ArrayList ArrayList=new ArrayList();
//arrayList的初始化数据
//...
//初始化适配器
MyAdapter=新的MyAdapter(上下文,0,arrayList);
//listview的更新项
public void updateValue(字符串newValue){
arrayList.get(position).valueFile=newValue;
adapter.notifyDataSetChanged();
}

这不是一个很好的实践,但非常简单。您可以将适配器设置为公共静态类变量,并执行MyClass.adapter.notifyDataSetChanged();另一种创建界面的方法是一种很好的方法,但编写更多的代码为什么不是一种好的做法?因为静态字段是已知的许多错误的来源,它们在整个应用程序生命周期中都存在。无法进行垃圾收集有什么更好的解决方案?ArrayList值已使用set()方法更新。我需要通知适配器上的更改。您需要确保updateValues方法中的arrayList和New()适配器(第一次)相同(相同内存)时的arrayList。并尝试删除MyAdapter=newmyadapter(…)我添加了代码,以显示如何在列表视图中更新项目