仅显示来自json调用的某些数据

时间:2013-09-16 00:23:29

标签: android json android-listview

我正在解析一个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和适配器,但这只是覆盖了第一个适配器中的信息。 我的想法是最好的方法,还是会有更好的方法?

2 个答案:

答案 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,其中介绍了如何优化适配器。我提供的适配器应该工作但效率不高