Android ListAdapter或可能的ListView在运行时更新文本

Android ListAdapter或可能的ListView在运行时更新文本,android,listview,text,set,listadapter,Android,Listview,Text,Set,Listadapter,你好,福克斯,我有一个小问题,我在网上和论坛上找不到合适的答案。请不要告诉我在运行时有人要求更改列表视图文本颜色的文章,因为我读了很多,但没有找到一篇可以帮助我的文章 我有一个简单的ListView,它通过使用ListAdapter显示字符串对象数组 我需要在运行时根据它们的内容更新一些ListView字符串。使用列表视图创建中使用的列表适配器的全局引用,我可以使用下面的代码获得每个列表视图字符串的内容 但是,除了检索之外,我希望能够依次修改每个字符串,然后将其放回相同的索引位置,并让列表视图反

你好,福克斯,我有一个小问题,我在网上和论坛上找不到合适的答案。请不要告诉我在运行时有人要求更改列表视图文本颜色的文章,因为我读了很多,但没有找到一篇可以帮助我的文章

我有一个简单的ListView,它通过使用ListAdapter显示字符串对象数组

我需要在运行时根据它们的内容更新一些ListView字符串。使用列表视图创建中使用的列表适配器的全局引用,我可以使用下面的代码获得每个列表视图字符串的内容

但是,除了检索之外,我希望能够依次修改每个字符串,然后将其放回相同的索引位置,并让列表视图反映更改。怎么做

        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

for(int x=0;x据我所知,您无法更改适配器中的项目-除非您使用自定义适配器(通过扩展BaseAdapter等…)

因此,我认为你必须:

  • 确保适配器的构造函数接受保存字符串的数据结构
  • 确保您的数据结构是全局的
  • 在需要时对该数据结构进行更改
  • 调用myAdapter.notifyDataSetChanged();
  • 这将告诉适配器在列表中进行了更改,应该重新创建listview

    更新listview后,您甚至可以通过以下方式将用户带回索引:

    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();
    }
    
    private ArrayList results=new ArrayList();//全局
    private BaseAdapter searchAdapter=new BaseAdapter(结果,this);//全局
    私有无效更新结果(最终ArrayList updatedList){
    结果=更新列表;
    最终ListView列表=(ListView)findViewById(R.id.search\u results);
    list.setAdapter(searchAdapter);
    list.setOnItemClickListener(新的ListView.OnItemClickListener(){
    //实现当你点击一个项目时会发生什么//
    });
    searchAdapter.notifyDataSetChanged();
    }
    

    这段代码对我来说效果不错,我希望它能有所帮助。

    刚刚偶然发现了这个问题并找到了解决方案。 我用的是一个

    m_ListAdapter = new SimpleAdapter(this, m_List, R.layout.option_list_row, columns, renderTo);
    
    listView中的每个项目都是一个手动选项,会导致显示一个对话框。一旦通过该对话框接收到数据,我所要做的就是创建一个新的SimpleAdapter,其中包含一个更新的ArrayList,其中包含新数据,然后将adapter设置为新适配器。
    列表视图将立即更新。

    关于“Gaaah”部分:在编辑器中选择代码块并单击“{}”按钮;适用于小片段和多行块。欢迎:)当[code]和[/code]约定多年来被证明是有效和直观的时,这就太复杂了。特别是当您想在注释中放入代码位时。我已经尝试从原始字符串数组生成一个新的数组适配器,然后设置列表适配器,就像创建活动时一样。但是更改没有显示,我使用了.notifyDataSetChanged()。嘿,Andrew,我刚刚编辑了我的答案-添加了一些代码,希望能有所帮助。为此,我自己做了类似的事情,只是从从现有适配器检索(然后修改)的字符串创建了一个新适配器。