【问题标题】:Android Updating ListViewAndroid 更新 ListView
【发布时间】:2010-12-20 01:00:32
【问题描述】:

我查看了Android - how to update ListView item that is currently displayedhttp://commonsware.com/Android/excerpt.pdf 以及Android 文档,但我仍然不明白。

我的问题:
使用处理程序,我正在尝试更新我从从 MySQL 数据库检索数据的 Web 服务填充的 Stock 数据多列列表视图。 为了更新列表视图,我调用了一个 servlet,它返回一个我使用 DOM 循环的 XML。

我找不到将新数据(来自 XML)应用到 Listview 中的有效方法,尽管只需要更新第三列(Trade Column)。此外,当我尝试从 ListView 行投射视图时,我得到一个 NullPointerException 并且无法弄清楚原因。

到目前为止我所做的代码如下。

java代码:

private void updateUI() throws Exception
{        
    Date dt = new Date();                 
    int hours = dt.getHours();
    int minutes = dt.getMinutes();                 
    int seconds = dt.getSeconds();                 
    String curTime = hours + ":" + minutes + ":"+ seconds;

    refreshHandler.sleep(60000);

    ListView listview = (ListView) findViewById(R.id.listview); 

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse("http://10.0.0.29:8080/CI3500/FTSEXML");

    //Filter and store ALL 'update' XML elements into node array
    NodeList nodeList = doc.getElementsByTagName("update");
    View v = null;
    TextView t = null;

    Adapter adapter = listview.getAdapter();

    for (int i = 0; i < adapter.getCount(); i++) 
    {
        v = listview.getChildAt(i);
        t = (TextView)v.findViewById(R.id.item2);

        String companyCode = t.getText().toString(); //Column 1

        for(int j = 0; j < nodeList.getLength(); j++) 
        {
            if(companyCode == nodeList.item(j).getFirstChild().getNodeValue())
            {
                //TODO Update Listview Code
            }
        }
    }       

    txtStatus.setText(String.valueOf("Last Update: " + curTime));
}

listview映射如下:

// create the grid item mapping
String[] columns = new String[] {"col_1", "col_2", "col_3" };
int[] rows = new int[] { R.id.CodeColumn, R.id.NameColumn, R.id.TradeColumn };

【问题讨论】:

    标签: java android android-widget


    【解决方案1】:

    您应该实现自己的 ListView 适配器,它将向列表视图提供数据。从适配器调用 notifyDataSetChanged() 将强制列表视图从适配器获取数据。直接更新列表视图看起来很奇怪。

    【讨论】:

    • boulder,谢谢一百万,我能够实现我的自定义 ListAdapter 并且似乎可以成功刷新它,尽管我会在明天早上确认这一点,因为库存仅在上午 8 点到下午 4:30 更新。首先它很繁琐和令人困惑,但是一旦你理解了这个概念,它就是小菜一碟!任何想了解自定义 ListAdapters 的人都可以查看 [本网站][1] 和 mylifewithandroid.blogspot.com/2008/04/…。 [1]:united-coders.com/phillip-steffensen/…
    【解决方案2】:

    你可以调用 invalidate 让列表视图重绘。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 2017-11-30
      • 2012-01-01
      相关资源
      最近更新 更多