Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.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时出现问题:UnsupportedOperationException_Java_Android_Exception_Listview - Fatal编程技术网

Java 刷新listView时出现问题:UnsupportedOperationException

Java 刷新listView时出现问题:UnsupportedOperationException,java,android,exception,listview,Java,Android,Exception,Listview,为什么我无法刷新/重新加载我的ListView? 我已经编写了一个应用程序,可以读取html网站,将信息保存在一个字符串数组中,并将其显示在我的ListView中。 但每次我关闭并重新打开应用程序时,新内容都会附加到现有内容中。 在第一次跑步中,我得到了e。g、 在第二轮中,“1234”和“1234”,然后是“1234 1234”,依此类推。 我搜索了很多,找到了清除ArrayAdapter(aa)并用新数据重新填充它的方法 ->aa.clear()/aa.setModifyDataChange

为什么我无法刷新/重新加载我的ListView? 我已经编写了一个应用程序,可以读取html网站,将信息保存在一个字符串数组中,并将其显示在我的ListView中。 但每次我关闭并重新打开应用程序时,新内容都会附加到现有内容中。 在第一次跑步中,我得到了e。g、 在第二轮中,“1234”和“1234”,然后是“1234 1234”,依此类推。 我搜索了很多,找到了清除ArrayAdapter(aa)并用新数据重新填充它的方法 ->aa.clear()/aa.setModifyDataChanged()/aa.remove(字符串对象)/aa.add(字符串) 但每次我调用一个方法时,我的应用程序都会强制关闭,LogCat显示异常:java.lang.UnsupportedOperationException。 为什么?这真是让我头疼。整个星期六下午,我都在试图修复它,但没有成功。。。 也许有人能帮我

这是我的代码片段

公共类视口扩展了ListActivity {

private static final int-AKTUALISIEREN=0;
私有静态ArrayList al=新ArrayList();
静态字符串[]TST;
静态阵列自适应ad;
公共布尔值onOptionsItemSelected(菜单项项)
{
开关(item.getItemId())
{
AKTUALISIEREN案:
getIt();
//在这里,广告关闭是强制关闭
setListAdapter(ad);
ListView lv=getListView();
lv.setTextFilterEnabled(真);
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getIt();
ad=新阵列适配器(此,R.layout.list_项,TST);
setListAdapter(ad);
//在这里,当我尝试ad.clear()时,我的应用程序会强制关闭
ListView lv=getListView();
lv.setTextFilterEnabled(真);
}
公共静态void getIt()
{
//这里我得到了html站点的源代码并解析了我的内容
//我在上面以静态方式声明的字符串数组TST中写入的所有必要信息
}
我希望有人能帮我。。。
非常感谢,祝你周日愉快。

每次更新listview时都要清除TST

你需要通过
ArrayList
List
而不是固定大小的数组来备份
ArrayAdapter
——固定大小数组的大小不能更改,也不能清除(不重新创建它,默认情况下就是全部用途)

因此,将适配器的内容设置为
al
而不是
TST
(附带说明,您确实需要使用合理的名称命名变量)。然后调用
al.clear()
al.add(字符串)
,以修改支持适配器的数据集。更改数据集后,请调用
ad.notifyDataSetChanged
-这将导致列表适配器和列表更新显示

另外,您的适配器不应该是静态的(也不应该是
TST
al
)——这将导致内存泄漏,因为适配器保留对当前上下文的引用。永远不要使上下文为静态的(可绘制、适配器等).除非你知道为什么你希望某个东西是静态的,否则就把它作为一个普通变量

private static final int AKTUALISIEREN = 0;

private static ArrayList<String> al = new ArrayList<String>();
static String[] TST;
static ArrayAdapter<String> ad;

public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
    case AKTUALISIEREN:
    getIt();
        //here a ad.close does a force close 
        setListAdapter(ad);
        ListView lv = getListView();
        lv.setTextFilterEnabled(true);  
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }

}

public void onCreate(Bundle savedInstanceState) {  

    super.onCreate(savedInstanceState);
    getIt();
    ad = new ArrayAdapter<String>(this, R.layout.list_item, TST);
    setListAdapter(ad);
    // here, when I try ad.clear() my app does a force close
    ListView lv = getListView();
    lv.setTextFilterEnabled(true);   
}

public static void getIt ()
{
    // Here I get the source-code of the html-site and parse my content
    // All necessary Information I write in my String Array TST, declared above in a static way        
}