使用光标适配器的粘滞列表标题

时间:2015-02-02 07:23:39

标签: android

需要帮助!

如何在游标适配器中实现粘性列表标题。

我想要一个像这样的列表

  

标题:2014年12月   
孩子:day1 3000Kyats   
...   
孩子:day30 4000Kyats   

标题:2015年1月   
孩子:day1 10000Kyats   
.....   
孩子:day30 4000Kyats   

标题:Feburay 2015   
孩子:day1 10000Kyats   
.....   
孩子:day28 4000Kyats

查询

SELECT SUM(KeyAmount), DAY(KeyDate), MONTHNAME(MONTH(KeyDate)), YEAR(KeyDate)
FROM tbl
GROUP BY DAY(KeyDate), MONTH(KeyDate), YEAR(KeyDate)
ORDER BY YEAR(KeyDate), MONTH(KeyDate), DAY(KeyDate)

查询结果

Amount Day Month Year

20 29 December 2014
44 30 December 2014
25 1 January 2015

目标是用标题显示每日收入的总和。在一个标题下,将有该月的日期列表。 使用基座适配器很容易,但我担心它会很慢。我如何使用游标适配器?有办法吗?

由于

2 个答案:

答案 0 :(得分:1)

如果光标按字母顺序排序,则需要使用cursor.moveToPisition(i);

public class MyAdapter extends CursorAdapter implements StickListHeadersAdapter{
  public long getHeaderId(int i){
    mCursor.moveToPosition(i);
    int j = mCursor.getColumnIndex("Column_of_name");
    String name = mCursor.getString(j);
    return name.charAt(0);
  }

  public View getHeaderView(int i, View convertView, ViewGroup viewGroup){
    HeaderViewHolder holder;
    if (convertView != null){
      holder = (HeaderViewHolder) convertView.getTag();
    }
    else{
      convertView = LayoutInflater.from(mContext).inflate(R.layout.list_header_tree, viewGroup, false);
      holder = new HeaderViewHolder(convertView);
      convertView.setTag(holder);
    }

    mCursor.moveToPosition(i);
    int j = mCursor.getColumnIndex("Column_of_name");
    String name = mCursor.getString(j);
    String headerText = "" + name.charAt(0);
    holder.tvHeader.setText(headerText);
    return convertView;
  }

  //Using butterknife so HeaderViewHolder:
   static class HeaderViewHolder {
        @InjectView(R.id.tvHeader) TextView tvHeader;

        public HeaderViewHolder(View view) {
            ButterKnife.inject(this, view);
        }
    }
}

答案 1 :(得分:0)

如果您没有使用RecyclerView,请使用此library并覆盖getHeaderId(int position),并将月份数据从游标适配器发出。

我认为它可以解决您的需求。