MetBo
Erfahrenes Mitglied
- 4
Hallo,
Ich versuche gerade in meiner ListView Sections einzublenden.
Beispiel:
Um dies zu realisieren, habe ich eine eigene SimpleCursorAdapter Klasse (NewsAdapter_new) angelegt.
In einer LinkedHashMap<Integer, String> speichere ich mit <Position (Cursor Position), Sectionname> die Sections. Diese Funktion funktioniert soweit sehr gut.
In getView() rufe ich die Methode getItemViewType() auf, um zu entscheiden, ob die aktuelle Cursor Position ein normaler Eintrag oder eine Section ist.
Das Ganze klappt auch soweit ganz gut - es werden Sections und normale Einträge angezeigt. Mein Problem ist nun, dass die Einträge, die normalerweise auf der Section Position wären, verschwinden bzw. nicht angezeigt werden.
Hier meine Custom SimpleCursorAdapter Klasse:
Hat jemand mein Problem verstanden und könnte mir eventuell helfen eine Lösung zu finden?
Vielen Dank,
Grüße Metti
Ich versuche gerade in meiner ListView Sections einzublenden.
Beispiel:
== Section 03.09.2011 ==
News1 03.09.2011
News2 03.09.2011
News3 03.09.2011
News4 03.09.2011
== Section 02.09.2011 ==
News5 02.09.2011
News6 02.09.2011
News7 02.09.2011
== Section 01.09.2011 ==
News8 01.09.2011
News9 01.09.2011
Um dies zu realisieren, habe ich eine eigene SimpleCursorAdapter Klasse (NewsAdapter_new) angelegt.
In einer LinkedHashMap<Integer, String> speichere ich mit <Position (Cursor Position), Sectionname> die Sections. Diese Funktion funktioniert soweit sehr gut.
In getView() rufe ich die Methode getItemViewType() auf, um zu entscheiden, ob die aktuelle Cursor Position ein normaler Eintrag oder eine Section ist.
Das Ganze klappt auch soweit ganz gut - es werden Sections und normale Einträge angezeigt. Mein Problem ist nun, dass die Einträge, die normalerweise auf der Section Position wären, verschwinden bzw. nicht angezeigt werden.
Hier meine Custom SimpleCursorAdapter Klasse:
Code:
public class NewsAdapter_new extends SimpleCursorAdapter {
protected static final String TAG = "NewsAdapter";
protected static final int TYPE_HEADER = 0x00;
protected static final int TYPE_NORMAL = 0x01;
protected static final int TYPE_COUNT = 0x02;
protected final LayoutInflater mInflater;
protected final LinkedHashMap<Integer, String> mSections;
protected int mCurrentSectionMapSize = 0;
public NewsAdapter_new(Context context, int layout, Cursor c,
String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
mInflater = LayoutInflater.from(mContext);
mSections = getSeparators();
mCursor.moveToFirst();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int viewType = getItemViewType(position);
mCursor.moveToPosition(position);
switch (viewType) {
case TYPE_NORMAL: {
// Normale Einträge werden hier initialisiert
break;
}
case TYPE_HEADER: {
// Header-View wird hier initialisiert
break;
}
}
return convertView;
}
@Override
public int getCount() {
if (mCursor.getCount() != 0) {
return super.getCount() + mSections.keySet().size();
}
return 0;
}
@Override
public int getItemViewType(int position) {
if (mSections == null) {
return TYPE_NORMAL;
} else {
if (mSections.containsKey(position)) {
return TYPE_HEADER;
} else {
return TYPE_NORMAL;
}
}
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
if (mSections == null) {
return true;
}
return !mSections.containsKey(position);
}
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
protected LinkedHashMap<Integer, String> getSeparators() {
LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
String newDate = "";
String oldDate = "";
mCursor.moveToFirst();
if (!mCursor.isAfterLast()) {
do {
String currentString = mCursor.getString(mCursor.getColumnIndex(ArticleCol.DATE));
newDate = currentString.substring(0, 10);
if (!newDate.contentEquals(oldDate)) {
map.put(mCursor.getPosition(), Util.formatBackToRealDate(newDate));
}
oldDate = newDate;
} while (mCursor.moveToNext());
}
return map;
}
}
Hat jemand mein Problem verstanden und könnte mir eventuell helfen eine Lösung zu finden?
Vielen Dank,
Grüße Metti