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

时间:2011-09-29 21:01:12

标签: android listview text set listadapter

你好伙计我有这个小问题,我无法在网上和这些论坛上找到合适的答案。请不要指导我在运行时请求列表视图文本颜色更改的文章,因为我阅读了很多这些文章并且没有找到帮助我的文章。

我有一个简单的 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

2 个答案:

答案 0 :(得分:2)

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

所以,我认为你必须:

  1. 确保Adapter的构造函数接受包含字符串的数据结构
  2. 确保您的数据结构是全局的
  3. 在需要
  4. 时在该数据结构中进行更改
  5. 致电myAdapter.notifyDataSetChanged();
  6. 这将告诉适配器列表中已完成更改,并且应重新创建列表视图。

    在更新列表视图后,您甚至可以通过以下方式将用户带回索引:

    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将立即更新。