【问题标题】:Using StickyGridHeaders使用 StickyGridHeaders
【发布时间】:2013-05-28 21:52:57
【问题描述】:

StickyGridHeaders,但它没有按应有的方式工作,或者至少没有按我的意愿工作。

所以我得到了这个列表和里面的其他列表,然后我创建了一个标题列表(我使用原始列表)和一个完整的项目列表(所有子项目),然后像这样调用适配器:

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

然后我有我的适配器:

 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;
        }

我得到的结果只是一个普通的列表视图,所有项目都排序在另一个之下,没有网格视图或标题。 我做错了什么?

【问题讨论】:

    标签: android listview android-gridview


    【解决方案1】:

    终于知道怎么弄了。

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

    所以代码:

    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;
            }
        }
    

    【讨论】:

    • 你好兄弟。我已经实现了这个。但是我的标题仍然遵循带有数据项逻辑的 A 标题。你能解释一下如何改变吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2015-09-08
    • 2020-12-19
    • 2017-11-20
    相关资源
    最近更新 更多