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