DieGoldeneMitte
Dauergast
- 262
Hallo,
ich versuche gerade, die Listen aus der "Music" Applikation (die, in denen man die Items verschieben kann) für meine Applikation zu adaptieren. Dabei bin ich auf foglendes Problem gestoßen:
Nach einigem Scrollen und Verschieben wird als sich verschiebender Eintrag der Falsche angezeigt. Es kann passieren, dass man bei mehrfachem Auswählen hintereinander sogar unterscheidliche falsche Einträge gezeigt werden (ohne das zwischendurch etwas verschoben oder gescrollt wurde). Wenn man dann verschiebt, wird aber der richtige Verschoben - es ist also nur die Anzeige falsch.
Das Malen dieses Eintrags erfolgt so, dass man in dem vom Adapter erzeugten View setDrawingCacheEnabled aufruft und dann das Bild anfordert. Der richtige Eintrag wird eigentlich ausgewählt - das habe ich geprüft, der View hat im debug() unten auch die richtigen Daten. Aber es kommt trotzdem die falsche Bitmap zurück.
Kann es sein, dass Android sich bei den Caches verzettelt? Hat jemand so ein Verhalten auch schonmal beobachtet? Habe ich da irgendwo eine Nebenläufgikeit übersehen?
Hier ein die wesentlichen Codeausschnitte:
Aus dem Adapter
Aus TouchInterceptor.onInterceptTouchEvent
ich versuche gerade, die Listen aus der "Music" Applikation (die, in denen man die Items verschieben kann) für meine Applikation zu adaptieren. Dabei bin ich auf foglendes Problem gestoßen:
Nach einigem Scrollen und Verschieben wird als sich verschiebender Eintrag der Falsche angezeigt. Es kann passieren, dass man bei mehrfachem Auswählen hintereinander sogar unterscheidliche falsche Einträge gezeigt werden (ohne das zwischendurch etwas verschoben oder gescrollt wurde). Wenn man dann verschiebt, wird aber der richtige Verschoben - es ist also nur die Anzeige falsch.
Das Malen dieses Eintrags erfolgt so, dass man in dem vom Adapter erzeugten View setDrawingCacheEnabled aufruft und dann das Bild anfordert. Der richtige Eintrag wird eigentlich ausgewählt - das habe ich geprüft, der View hat im debug() unten auch die richtigen Daten. Aber es kommt trotzdem die falsche Bitmap zurück.
Kann es sein, dass Android sich bei den Caches verzettelt? Hat jemand so ein Verhalten auch schonmal beobachtet? Habe ich da irgendwo eine Nebenläufgikeit übersehen?
Hier ein die wesentlichen Codeausschnitte:
Aus dem Adapter
Code:
public void debug( int idx ) {
Log.d("oite","#="+idx+" => "+data.get(idx).title);
}
public View getView(int pos, View v, ViewGroup parent) {
DataRef holder = null;
Log.d("main","pos="+pos+",v="+(v==null?"null":v.toString()));
if( v==null ) {
v = inflator.inflate( R.layout.main_item, null );
holder = new DataRef();
holder.title = (TextView)v.findViewById(R.id.title);
v.setTag( holder );
v.setDrawingCacheEnabled(true);
} else {
holder = (DataRef)v.getTag();
}
TodoList e = data.get(pos);
holder.title.setText( e.title );
return v;
}
private class DataRef {
TextView title;
} // class DataHolder
Code:
((MyAdapter)getAdapter()).debug(itemnum);
Bitmap bitmap = Bitmap.createBitmap(item.getDrawingCache());
startDragging(bitmap, y);