ListView中的标头来自cursorAdapter

时间:2017-10-11 03:52:27

标签: android listview android-cursoradapter

我有一个带有列' word'的SQL表。和' date'。我使用CursorAdapter在ListView中显示单词列表。单词列表除以日期标题。具有相同日期的单词必须位于具有一个标题的一个部分中。 例如: 7月22日 书 球 7月21日 夏季 7月20日 总线 树

当我打开应用程序时,标题工作正常。但是在滚动标题开始改变位置并为具有不同日期的单词创建部分之后。如何解决?

public class DataCursorAdapter extends CursorAdapter {

private int mDateColumnIndex;
private int mCurrentView = 0; //if 0 - then with header

public DataCursorAdapter(Context context, Cursor c) {
    super(context, c, 0);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    int position = cursor.getPosition();
    mDateColumnIndex = cursor.getColumnIndex(DataEntry.COLUMN_WORD_DATE);
    if (position == 0){
        return LayoutInflater.from(context).inflate(R.layout.list_item_header, parent, false);
    }
    String date = cursor.getString(mDateColumnIndex);
    cursor.moveToPosition(position-1);
    String datePrevious = cursor.getString(mDateColumnIndex);
    cursor.moveToPosition(position);
    if (date.equals(datePrevious)){
        mCurrentView = 1;
        return LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
    }
    else
    {
        mCurrentView = 0;
        return LayoutInflater.from(context).inflate(R.layout.list_item_header, parent, false);
    }

}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView wordTextView = (TextView) view.findViewById(R.id.view_word);
    int wordColumnIndex = cursor.getColumnIndex(DataEntry.COLUMN_WORD_WORD);
    String word = cursor.getString(wordColumnIndex);
    wordTextView.setText(word);
    if (mCurrentView == 0){
        TextView dateTextView = (TextView) view.findViewById(R.id.view_date);
        String date = cursor.getString(mDateColumnIndex);
        dateTextView.setText(date);
    }
}

@Override
public int getItemViewType(int position) {
    return super.getItemViewType(position);
}

}

0 个答案:

没有答案