Question

I have a question about adding spinner to listview header:

  1. How should I get a spinner to showup in the listview header.
  2. How to dynamically populate values in this spinner based on values in the listview.

Description: I have a listview which populates values from an XML file (placed on the net). This list can be huge based on user selection on previous screen(s) and/ or data in XML file.

I would like to add a spinner at the top of the listview such that user will have an option to perform filter action/ sort action. How should this be achieved?

For example: If my app shows a list of books available in the library. The spinner should help user to: 1. Sort alphabetically based on book title 2. Sort alphabetically based on author name 3. Filter out only books related to 'War' 4. Filter out only books related to 'History' 5. Filter out only books related to 'Science'

When I am populating the listview, the XML provides details such as 'Type of Book', 'Author', 'Title', etc.

Question is, how do I place a spinner at the top & populate values like, the types (War, History, Crime, etc.) to the Spinner based on the list of books in the listview.

I have tried to be as descriptive as possible. If any further details required, please let me know.

Any help will be highly appreciated.

Thanks a Bunch!

Was it helpful?

Solution

For putting the spinner above the ListView, check this method out: http://developer.android.com/reference/android/widget/ListView.html#addHeaderView%28android.view.View%29

Or you could put a custom title-layout thing about the ListView in the parent layout for the Activity. More ListView help: http://www.vogella.de/articles/AndroidListView/article.html#listview_overview

As far as populating the spinner, you can have the spinner set to whichever values you want. In the example online( http://developer.android.com/resources/tutorials/views/hello-spinner.html ):

String[] myValues = // Put code here for the values and size of array you want. 
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this, YOUR_STRING_ARRAY_VARIABLE_HERE, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

It is your job as a programmer to figure out how to take which item is selected in the spinner and make changes to the listView. To update values in a listview check this out: update listview dynamically with adapter

One solution and how I would do it is make a custom Java class for an Entry so that you can take in the XML file and give each entry instance variables or characteristics to sort them by. Then using this data model, make a class EntryList or EntryArray that can handle the sorting of your Entry data objects. Then have a toStringArray() method that will return a string array. In this way you hold on to the data, and allow all of the sorting you need. Each time the spinner is clicked, the corresponding method in EntryList or EntryArray is called, a new String array is put in the adapter, and the user sees the new sorted list.

This was probably a lot to digest, so read up on all of the links, and see if you can implement it. Cheers!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top