CalendarListView

介绍:

CalendarListView 是一个ListView 和 CalendarView 结合并互相联动的控件,日历可以伸缩扩展,列表可以上拉下沉, 日历的选择会让ListView 滑动到指定的位置,ListView的滑动同时也会带动日历滑到指定位置并能同时自动切换月份。

运行效果:

使用说明:

Download

 compile 'com.kelin.calendarlistview:library:1.0.0'

中文文档:CalendarListView 日历列表文档

1、自定义 CalendarView (like:add price、tag、icon into your items of CalendarView)

//create a Model extends BaseCalendarItemModel then add your custom field. 
public class CustomCalendarItemModel  extends BaseCalendarItemModel{     
   //data count.
   private int count;
   private boolean isFav;
   ...
   //getXXX 
   //setXXX
   ...
}
//create a custom Adapter extends BaseCalendarItemAdapter<T> (T  extends //BaseCalendarItemModel),then override getView function to custom your 
//calendar item's style. 
public class CalendarItemAdapter extends BaseCalendarItemAdapter<CustomCalendarItemModel>{
    //date format:"yyyy-MM-dd"
    @Override
    public View getView(String date, CustomCalendarItemModel model, View convertView, ViewGroup parent) {
        // CustomCalendarItemModel model = dayModelList.get(date); is supported.
        ....
        ....
        ViewGroup view = (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.custom_calendar_item, null);
        TextView dayNum = (TextView)  view.findViewById(R.id.day_num);
        dayNum.setText(model.getDayNumber());
        ....
        //get data from model then render your UI.
        ....
        ....
   }
}

tips:you can just use BaseCalendarItemAdapter but it is only show date in calendar View.

2、自定义r ListView,重写 getSectionHeaderView 和 getItemView

public class ListItemAdapter extends BaseCalendarListAdapter<ListModel> {
    //date format:'yyyy-MM-dd'
    @Override
    public View getSectionHeaderView(String date, View convertView, ViewGroup parent) {
       // List<ListModel> modelList = dateDataMap.get(date);is supported.
       .....
       //custom style of SectionHeader
       .....
    }
    @Override
    public View getItemView(ListModel model,String date, int pos, View convertView, ViewGroup parent) {
      //you can get model by follow code. 
      //List<ListModel> modelList = dateDataMap.get(date);
      //model = modelList.get(pos) 
      .....
      //custom style of List Items
      .....
   }
}

3、初始化 CalendarListView , 设置 CalendarItemAdapter 和 ListItemAdapter

<com.kelin.calendarlistview.library.CalendarListView   
   android:id="@+id/calendar_listview"    
   android:layout_width="match_parent"    
   android:layout_height="match_parent">
</com.kelin.calendarlistview.library.CalendarListView>
@Override
protected void onCreate(Bundle savedInstanceState) {
 ...
 calendarListView = (CalendarListView) findViewById(R.id.calendar_listview);
 listItemAdapter = new ListItemAdapter(this);
 calendarItemAdapter = new CalendarItemAdapter(this);
 calendarListView.setCalendarListViewAdapter(calendarItemAdapter, listItemAdapter);
 ...
}

4、从服务器加载数据然后更新DataSet

  • CalendarView
private void onCalendarDataLoadFinish(List<Data> datas){
    ....
    ....
    //TreeMap<String, T>,key:'yyyy-MM-dd',value:model of this date.
    TreeMap<String, CustomCalendarItemModel> dateMap=calendarItemAdapter.getDayModelList();
    ....
    CustomCalendarItemModel customCalendarItemModel = dateMap.get(date);
    //update model
    customCalendarItemModel.setXXX(data.getXXX());
    ....
    calendarItemAdapter.notifyDataSetChanged();
}
  • ListView
//key:'yyyy-mm-dd' format date  
private TreeMap<String, List<ListModel>> listTreeMap = new TreeMap<>();
private void onListDataLoadFinish(List<Data> datas){
   ....
   ....
  for(Data item:datas) {
     String day=item.getDate();
    //add data
     if (listTreeMap.get(day) != null) {    
         List<NewsService.News.StoriesBean> list = listTreeMap.get(day);    
         list.add(i);
      } else {    
         List<NewsService.News.StoriesBean> list = new ArrayList<NewsService.News.StoriesBean>();    
         list.add(i);   
         listTreeMap.put(day, list);
     }
  }
 ....
 listItemAdapter.setDateDataMap(listTreeMap);
 listItemAdapter.notifyDataSetChanged();
}

5、event support

  • date selected.
calendarListView.setOnCalendarViewItemClickListener(new CalendarListView.OnCalendarViewItemClickListener() {   
     @Override    
     public void onDateSelected(View View, String selectedDate, int listSection) {   
     //do something....
     }
});
  • month changed.
calendarListView.setOnMonthChangedListener(new CalendarListView.OnMonthChangedListener() {    
       @Override    
       public void onMonthChanged(String yearMonth) {
       //yearMonth:'yyyy-MM-dd'
       }
});
  • refresh and load more.
calendarListView.setOnListPullListener(new CalendarListView.onListPullListener() {    
    @Override    
    public void onRefresh() {
    }    
    @Override    
    public void onLoadMore() {
    }
});
已下载
0