你好伙计我有这个小问题,我无法在网上和这些论坛上找到合适的答案。请不要指导我在运行时请求列表视图文本颜色更改的文章,因为我阅读了很多这些文章并且没有找到帮助我的文章。
我有一个简单的 ListView ,它通过使用 ListAdapter 显示一个String对象数组。
我需要在运行时根据内容更新一些 ListView 字符串。使用列表视图创建中使用的列表适配器的全局引用,我可以使用以下代码获取每个列表视图String的内容。
但是,除了检索之外,我还希望能够依次修改每个字符串,然后将其放回到相同的索引位置并让列表视图反映更改。怎么样?
for (int x = 0; x <= listAdapter.getCount();x++)
{
Object o = this.listAdapter.getItem(x);
if (o.getClass().getSimpleName().equals("String"))
{
String s = (String) o;
s = modifyString(s);
//s is the string I want to modify then put back in the same place.
}//end if
}//end for
答案 0 :(得分:2)
据我所知,您无法更改适配器中的项目 - 除非您使用自定义适配器(通过扩展BaseAdapter等...)
所以,我认为你必须:
myAdapter.notifyDataSetChanged();
这将告诉适配器列表中已完成更改,并且应重新创建列表视图。
在更新列表视图后,您甚至可以通过以下方式将用户带回索引:
list.setSelection(positionWhereTheUserClicked);
我希望这有帮助,如果您需要更多代码参考,请告诉我。
这是一些代码
private ArrayList<String> results = new ArrayList<String>(); //global
private BaseAdapter searchAdapter = new BaseAdapter (results, this); //global
private void updateResults(final ArrayList<String> updatedList){
results = updatedList;
final ListView list = (ListView)findViewById(R.id.search_results);
list.setAdapter(searchAdapter);
list.setOnItemClickListener(new ListView.OnItemClickListener(){
// implementation of what happens when you click on an item //
});
searchAdapter.notifyDataSetChanged();
}
这段代码在我的结尾工作正常,我希望它有所帮助。
答案 1 :(得分:0)
偶然发现了这个问题并找到了解决方案。 我正在使用
m_ListAdapter = new SimpleAdapter(this, m_List, R.layout.option_list_row, columns, renderTo);
我的listView中的每个项目都是一个manu选项,导致对话框显示,一旦通过对话框接收到数据,我所要做的就是创建一个新的SimpleAdapter,其中包含更新的ArrayList,其中包含新数据,然后只需setAdapter到新适配器。 ListView将立即更新。