【问题标题】:update listview from simpleAdapter with new data使用新数据从 simpleAdapter 更新列表视图
【发布时间】:2011-03-15 22:47:23
【问题描述】:

我已经实现了一个自定义列表视图,其中包含来自here 的教程中的多个 TextView,并且一切运行良好,但我希望能够使用新数据即时更新 textview。

例如,我在列表视图中的项目上设置了一个单击侦听器,当单击时会显示一个对话框,提示用户输入数据。我可以通过调用 populateList() 来获取新数据并更新数组,但是在重新启动活动之前,新数据不会显示在文本视图中。我如何告诉 simpleAdapter 获取新数据并在对话框关闭后立即显示它?

编辑:显示的代码:

在 onCreate 中:

lv = (ListView) findViewById(R.id.list);
adapter = new SimpleAdapter(
            this,
            list,
            R.layout.listtextview,
            new String[] {"Title","Desc"},
            new int[] {R.id.settingsListItem,R.id.settingsListDesc}
            );
    populateList(settingsList, settingsListDetails);
    lv.setAdapter(adapter);
    lv.setOnItemClickListener
        (new OnItemClickListener()
            {
                public void onItemClick(AdapterView<?> parent, View    
                view,int position, long id) 
                {   
                   if (position == 0)
                                       {
                     showDialog(WAKE_TIME);
                   }        
                }
         });

打开对话框:

public Dialog onCreateDialog(int id) 
{
    switch(id) {
        case WAKE_TIME :

   return new TimePickerDialog(this,WakeTimeSetListener,     
   wakeHour, wakeMinute, false);
}

调用 notifyDataSetChanged 的​​ TimePicker 对话框:

private TimePickerDialog.OnTimeSetListener WakeTimeSetListener = new     
TimePickerDialog.OnTimeSetListener() 
{
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) 
        { 
            wakeHour = hourOfDay;            
            wakeMinute = minute;

            wakeHourText = Integer.toString(hourOfDay);
            wakeMinuteText = Integer.toString(minute);

            String preftime = hourOfDay + ":" + minute;

            SimpleDateFormat df = new SimpleDateFormat("HH:mm"); 
            SimpleDateFormat dfOut = new SimpleDateFormat("hh:mm a");

            try 
            {
                wakeDate = df.parse(preftime);
            } 
            catch (ParseException e1) 
            {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }  


                populateList(settingsList, settingsListDetails);

                adapter.notifyDataSetChanged(); 

        }

【问题讨论】:

    标签: android listview simpleadapter


    【解决方案1】:

    你试过了吗

    adapter.notifyDataSetChanged();
    

    【讨论】:

    • @Robby Pond :它很脏,但它来了。
    • @dell116 - 抱歉,我没有马上发现。 SimpleAdapter 仅针对静态数据而设计,并且不会在数据更改时创建全新的 SimpleAdapter 实例。在此处查看其他答案stackoverflow.com/questions/3313347/…
    • @slund - 不要道歉,谢谢您的意见。需要输入! (短路电影参考)有没有其他方法可以使用相同的教程,但是使用 ArrayAdapter 或其他东西?这真的让我感到沮丧。
    • @slund - 您可以在 SimpleAdapter 上调用 notifyDataSetChanged()。我的问题是,当我调用 populateList() 方法时,我没有正确地重新设置变量值,导致我相信没有任何改变。上面的代码可以通过正确调用 populateList() 来为其中的变量重新分配新数据。
    • @dell116 - 太好了!真高兴你做到了。我也学到了一些东西。
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多