Java [Android] ExpandableListView - Gruppen schließen

Bender86

Lieutenant
Registriert
Jan. 2007
Beiträge
718
Moin,

ich arbeite grade an einem Android App, bei dem ich eine ExpandableList verwende um Notizen und Kategorien anzuzeigen. Dabei sind die Kategorien die Obergruppen und die Notizen jeweils children ihrer Kategorie. Um die Daten in den View zu bekommen benutze ich einen SimpleCursorTreeAdapter und möchte in dessen onGroupExpanded() Methode alle Gruppen ausser der Ausgewählten schließen. Dazu müsste ich aber an den ExpandableListView kommen, da dieser die Methode "collapseGroup(int groupPos)" besitzt. Leider bin ich recht neu bei Android und weiß nicht wie ich an diesen komme, Google und die Doku haben mir bisher auch nicht helfen können. Mein Code sieht etwas gekürzt etwa so aus:

Code:
public class CategoryView extends ExpandableListActivity {
	
	public static final String TAG = "CategoryView";
	private DbAdapter db;
	public MyExpandableListAdapter mAdapter;
	int categoryIdColumnIndex;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setTitle("aNote");
        setContentView(R.layout.category_view);
        
        db = new DbAdapter(this);
        db.open();
        db.categories.createTestCategories();
        db.notes.createTestNotes();

        
        Cursor categoryCursor = db.categories.all();
        startManagingCursor(categoryCursor);
        
        categoryIdColumnIndex = categoryCursor.getColumnIndexOrThrow(DatabaseCategory.COL_ID);
        
        mAdapter = new MyExpandableListAdapter(categoryCursor,
                this,
                R.layout.category_row,
                R.layout.note_row,
                new String[] {DatabaseCategory.COL_NAME},
                new int[] {R.id.category_name},
                new String[] {DatabaseNote.COL_NAME}, 
                new int[] {R.id.note_name});

        setListAdapter(mAdapter);
        
    }
    
    public class MyExpandableListAdapter extends SimpleCursorTreeAdapter{
    	
        public MyExpandableListAdapter(Cursor cursor, Context context, int groupLayout,
                int childLayout, String[] groupFrom, int[] groupTo, String[] childrenFrom,
                int[] childrenTo) {
            super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childrenFrom,
                    childrenTo);
        }

        @Override
        protected Cursor getChildrenCursor(Cursor categoryCursor) {

        	long id = categoryCursor.getLong(categoryIdColumnIndex);

        	Cursor itemsCursor = db.categories.notesById(id);
        	startManagingCursor(itemsCursor);
        	return itemsCursor;
        }

		@Override
		public void onGroupExpanded(int groupPosition) {
			super.onGroupExpanded(groupPosition);
			for(int i = 0; i < this.getGroupCount(); i++) {
				if(i != groupPosition) {
					// collapse the group i ...
				}
			}
		}
    }
}

Ich hoffe hier kann mir jemand helfen.. Viele Grüße,
Bender
 
Bin mir jetzt nicht sicher ob ich deine frage richtig verstehe aber im Grunde musst du doch nur in onCreate() mit this.getExpandableListView() die View holen oder?
 
Ich benötige den ExpandableListView aber innerhalb der "onGroupExpanded" Methode. Und dort gibt es kein "getExpandableListView()", weil die zum SimpleCursorTreeAdapter gehört.

/edit

Der SimpleCursorTreeAdapter bekommt ja einen Context mitgegeben, kann ich über diesen an meinen CategoryView kommen? (Der von ExpandableListView abgeleitet ist) Denn wenn ich darüber an ExpandableListView komme kann ich wahrscheinlich auch die Gruppen schließen.
 
Zuletzt bearbeitet:
Dann übergib ihn doch beim Construktoraufruf oder übergib statt Context gleich die ExpandableListActivity (leitet ja von Context ab) und hol dir von da die view
 
Ok ich werde das mal mit übergeben ausprobieren. Ich hatte zwischendurch noch im android-dev IRC gefragt dort wurde noch vorgeschlagen den Context einfach nach CategoryView zu casten. Aber wenns mit übergeben klappt bin ich glücklich. Danke für deine Hilfe. :)
 
Zurück
Oben