使用StickyGridHeaders [英] Using StickyGridHeaders

查看:602
本文介绍了使用StickyGridHeaders的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

StickyGridHeaders 的,但它不是,它应该工作,或至少是我想要的。

StickyGridHeaders, but its not working as it should, or at least as I want.

所以,我得到这个列表内的其他名单,并与我创建了一个标题列表(我用的是原来的列表)和一个完整的项目列表(所有子项),并且调用像这样的适配器:

So I got this list with other lists inside, and with that i create a header list(I use the original list) and a full items list (all the subitems), and the call the adapter like so:

List<CalendarDate.CalendarTvShowEpisode> lista=new LinkedList<CalendarDate.CalendarTvShowEpisode>();
for(CalendarDate l:response){
        lista.addAll(l.episodes);
    }
setListAdapter(new WeekCalendarAdapter(getActivity(), weekCalendar,lista));

然后,我有我的适配器:

Then i have my Adapter:

公共类WeekCalendarAdapter扩展了BaseAdapter实现StickyGridHeadersBaseAdapter {

public class WeekCalendarAdapter extends BaseAdapter implements StickyGridHeadersBaseAdapter {

    private final List<CalendarDate> mListHeaders;
    private final List<CalendarDate.CalendarTvShowEpisode> lista;
    private LayoutInflater inflater;

    public WeekCalendarAdapter(Context context, List<CalendarDate> mList, List<CalendarDate.CalendarTvShowEpisode> lista) {
        this.mListHeaders = mList;
        this.lista=lista;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
       return lista.size();
    }

    @Override
    public Object getItem(int i) {
        return lista.get(i);
    }

    @Override
    public long getItemId(int i) {
        return lista.get(i).episode.firstAired.getDay();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.calendarweek_item_episode, parent, false);
        }

        AQuery aq= new AQuery(convertView);
        aq.id(R.id.imageViewCalendarEpisodeBackdrop).image(lista.get(position).episode.images.screen);
        aq.id(R.id.textViewCalendartext).text(lista.get(position).episode.firstAired.getDay()+"");


        return convertView;
    }


    @Override
    public int getCountForHeader(int header) {
        return mListHeaders.get(header).episodes.size();
    }

    @Override
    public int getNumHeaders() {
        return mListHeaders.size();
    }

    @Override
    public View getHeaderView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.calendarweek_item, parent, false);
        }

        AQuery aq = new AQuery(convertView);
        SimpleDateFormat format = new SimpleDateFormat("E MM dd, yyyy");
        aq.id(R.id.textViewCalendarWeekDay).text(format.format(mListHeaders.get(position).date) + "");

        return convertView;
    }

我得到的结果却与有序下面再创新项目,没有GridView控件也没有头一个正常的列表视图。 我是什么做错了什么?

The result I get is just a normal listview with all items ordered on below another, no gridview nor header. What I'm a doing wrong?

推荐答案

终于找到了如何做到这一点。

Finally found out how to do it.

和存在的主要问题是,它不能是一个listfragment,因为,listfragment有一个列表视图。它必须是一个片段,然后你的视图需要有一个com.tonicartos.widget.stickygridheaders.StickyGridHeadersGridView

And the main problem is that it cant be a listfragment because, well listfragment has a listview. It has to be a Fragment and then your view need to have a com.tonicartos.widget.stickygridheaders.StickyGridHeadersGridView

所以,code:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.calendarweek_fragment, container, false);


        StickyGridHeadersGridView l = (StickyGridHeadersGridView) rootView.findViewById(R.id.listViewCalendar);
        mAdapter = new WeekCalendarAdapter(getActivity(), weekCalendar, lista);
        l.setAdapter(mAdapter);
return rootView;
}

和查看:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <com.tonicartos.widget.stickygridheaders.StickyGridHeadersGridView
        android:id="@+id/listViewCalendar"

        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:columnWidth="160dp"
        android:numColumns="auto_fit"
        android:stretchMode="columnWidth"
        android:gravity="left"
        android:background="@color/calendar_background"/>
</LinearLayout>

我的适配器

public class WeekCalendarAdapter extends BaseAdapter implements StickyGridHeadersBaseAdapter {

        private final List<CalendarDate> mListHeaders;
        private final List<CalendarDate.CalendarTvShowEpisode> lista;
        private LayoutInflater inflater;

        public WeekCalendarAdapter(Context context, List<CalendarDate> mList, List<CalendarDate.CalendarTvShowEpisode> lista) {
            this.mListHeaders = mList;
            this.lista = lista;
            inflater = LayoutInflater.from(context);
        }

        @Override
        public int getCount() {
            return lista.size();
        }

        @Override
        public CalendarDate.CalendarTvShowEpisode getItem(int i) {
            return lista.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.calendarweek_item_episode, parent, false);
            }

           //EDIT YOUR GRID ITEM HERE
            return convertView;
        }

        @Override
        public int getCountForHeader(int i) {
            return mListHeaders.get(i).episodes.size();
        }

        @Override
        public int getNumHeaders() {
            return mListHeaders.size();
        }

        @Override
        public View getHeaderView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.calendarweek_item, parent, false);
            }
           //EDIT YOUR VIEW HEADER HERE


            return convertView;
        }
    }

这篇关于使用StickyGridHeaders的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆