我正在解析一个json结果,它存储在HashMap中,然后用listview显示它。它唯一的错误就是这一天显示了两次(或三次),我希望每一天只显示一次。我知道它现在不止一次显示,因为它是以这种方式编码的,但我不确定如何改变它所以它只显示一次。
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);
我认为要实现仅显示一次的那一天,我需要有多个列表视图,并且只在第一个列表视图中显示星期一,在下一个星期二等等,但我不知道该怎么做。我尝试将星期二放入第二个hashmap和适配器,但这只是覆盖了第一个适配器中的信息。 我的想法是最好的方法,还是会有更好的方法?
答案 0 :(得分:1)
您应该扩展BaseAdapter并考虑使用比simgle类型更多的行创建Listview。 一种类型将是您的标题,第二种将显示您想要显示的与日期相关的内容。
这可能会对您有所帮助http://antew.com/?p=162
答案 1 :(得分: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);
您还应该查看Making ListView Scrolling Smooth,其中介绍了如何优化适配器。我提供的适配器应该工作但效率不高