1

我正在解析一个 json 结果,它存储在一个 HashMap 中,然后用一个列表视图显示它。atm 唯一的问题是一天显示两次(或三次),我希望每天只显示一次。我知道它现在显示不止一次,因为它是以这种方式编码的,但我不确定如何更改它,所以它只显示一次。

json数据

{
"Monday": [
    {
        "Day": "Monday",
        "Time": "09:15",
        "Title": "123"
    },
    {
        "Day": "Monday",
        "Time": "12:15",
        "Title": "456"
    }
],
"Tuesday": [
    {
        "Day": "Tuesday",
        "Time": "09:15",
        "Title": "789"
    },
    {
        "Day": "Tuesday",
        "Time": "10:15",
        "Title": "ABC"
    },
    {
        "Day": "Tuesday",
        "Time": "11:15",
        "Title": "DEF"
    }
]
}

我正在使用下面的适配器将数据显示到屏幕上。“列表”是哈希图,“日期、时间和标题”是要显示的 3 位信息,R.id.X 是信息进入的文本视图。

ListAdapter adapter = new SimpleAdapter(Main.this, List, R.layout.main_layout, new String[] {DAY, TIME, TITLE}, new int[] {R.id.Day, R.id.Time, R.id.Title});
setListAdapter(adapter);

我认为要实现一天只显示一次,我需要有多个列表视图,并且在第一个列表视图中只显示星期一,下一个是星期二等,但我不知道该怎么做。我尝试将 tuesday 放入第二个 hashmap 和适配器,但这只是覆盖了第一个适配器中的信息。我的想法是解决这个问题的最好方法还是有更好的方法?

4

2 回答 2

1

您应该扩展 BaseAdapter 并考虑创建具有多于 simgle 类型的行的 Listview。一种类型将是您的日期标题,第二种类型将显示您想要显示的与日期相关的内容。


这可能会帮助你http://antew.com/?p=162

于 2013-09-16T06:45:47.207 回答
0

您可以通过创建自定义适配器来实现您想要的,您可以在其中指定您需要显示的内容。

例如,您可以执行以下操作:

public class CustomAdapter extends SimpleAdapter
{

    public CustomAdapter( Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to )
    {
        super( context, data, resource, from, to );
    }

    @Override
    public View getView( int position, View convertView, ViewGroup parent )
    {
        if(some_condition/*whatever condition you want to show only days*/)
        {
            convertView.findViewById( R.id.Time ).setVisibility( View.GONE );
            convertView.findViewById( R.id.Title ).setVisibility( View.GONE );
        }
        else
        {
            convertView.findViewById( R.id.Time ).setVisibility( View.VISIBLE );
            convertView.findViewById( R.id.Title ).setVisibility( View.VISIBLE );
        }

        return convertView; 
    }
}

然后做:

ListAdapter adapter = new CustomAdapter(Main.this, List, R.layout.main_layout, new String[] {DAY, TIME, TITLE}, new int[] {R.id.Day, R.id.Time, R.id.Title});
setListAdapter(adapter);

您还应该查看使 ListView 滚动平滑,其中介绍了如何优化适配器。我提供的适配器应该可以工作但效率不高

于 2013-09-16T01:56:40.453 回答