Change ArrayList data in ListView - java

I need to create many alarms, so I need a list view which contains items with a DatePicker, a TimePicker and a Delete Button. I have tried various way but I have not found a solution to this issue:
I want to be able to change the data in the DatePicker or TimePicker, which will change the data in an ArrayList for the corresponding Alarm. To do this however, I will need position, but as it is not final I cannot use it to access the Alarm in the ArrayList from my Adapter.
How would I go about doing this?
Thanks

Related

Listview filter through same names Android

So I have a custom spinner header, where the user can change the title of names based on selection. What I want to do is if they click on the spinner and change the default, then it only shows the names in the listview from the title of names. Currently I have tried this by reinstantiating my fragment from my tabhost, and if conditions are met it would just remove from list everything that doesnt have what user selected. But this is inefficient and it didn't work as the listview wasn't updated and the condition wasn't even getting called on the new instantiation... Is there any filter way I can do for this? Any ideas or help would be great!
You only need to refresh the ListView not the entire fragment. There are several ways to do this, including providing a different data source to the ListView's adapter. The exact details for how to do this depend on whether you are using an ArrayAdapter or a CursorAdapter.

NavigationDrawer update items

I'm using the navigation drawer example in Android. What's the easiest way to change the string items in the adapter dynamically? Do I just create a new adapter and set it with my new values?
The problem is I'm altering the string items based on user state logged in and logged out. How do I access it from a non static context and just say update list adapter? It doesn't seem to be re-drawing itself and running my adapter code which is dynamic based on user state, so I guess it runs/inits once and I have to create and load a new adapter if I want to change it later?
Thanks.
You haven't given us much to go on (a little code would be nice), but you can update the data in the ListView by calling notifyDatasetChanged() on the Adapter. If you are not using a custom Adapter e.g. an ArrayAdapter then you can just create a new Adapter instance with different String values and set it to the ListView.

Get overall string text of different dynamic views

I have an android fragment that looks something like this:
Every time the user clicks add/remove a new row is added/removed. When they click okay, then I need to return a string for all the views above, for example "TextATextBTextCTextD".
What would be a good way to go about this? I thought about adding tags for each new view, then doing a for loop through each view. But because I have spinners and edit views, I wasn't sure how to get the view for each then get their text.
Any help would be appreciated. Thanks.
Well, your tag option isn't bad... everytime you change one of the view's values, you could set the tag of the view to the string value, then iterate over the views and just collect the tags.
Another way to do it, would be to create your own custom spinner / edittext & make them all implement an interface which has a method called String getDisplayText()
Then, whenever you create a view, place it in an array of that interface type, then iterate over all your objects and call getDisplayText() on all of them.
Hope this helps :)

Android ListView not showing newly added items and erasing old items when switching content views

I have a custom listview defined in my xml layout file. I can add items to this ListView inside onCreate method, through an array adapter.
However when I add items from another content view and then go back to the content view with the ListView all the items are gone and there's nothing listed. Even after calling .notifyDataSetChanged();
It seems like I can only add to the list when the content view containing the ListView is currently being displayed. Is this the default behavior?
Failed attempted workaround
I used another array to keep the newly added items and then try to add them when the ListView became visible again. I had to override onContentChanged() to do so but then no items were added still.
So the main question is
How can I dynamically add items to the ListView even if it's out of sight and still preserve the old items?
PS: I have to say the Android API is one of the worst I've ever come across.
If you change content view, then all the previous views are going to be destroyed. Are you using an adapter? If so, then it would be very easy to add all the items to the list again.
There shouldn't be any reason to setContentView any time other than in onCreate.
If you were looking to have multiple screens, instead of changing content view, then start a new activity.
dynamically add items:
//add at the top of the list
mListView.addHeaderView(itemView);
// add at the bottom of the list
mListView.addFooterView(itemView);

Updating the UI during a after a button push

I have been thinking about adding a button to a View which when pressed adds another view on the bottom. It would resemble the Clock application that comes preinstalled in which you push a view in form of an alarm which is then added to a list.
Does anyone have any experience with how to implement that?
Have a look at the documentation for ListView, particularly the setAdapter() method. You'll want to have some sort of backing collection most likely as the adapter, such as an ArrayAdapter, to which you can add new items, and have them populate into the list.
Use a listview, populate it.
Then when you press the button, add something to your data, then:
public void notifyDataSetChanged ()
Since: API Level 1 Notifies the attached observers that the underlying
data has been changed and any View reflecting the data set should
refresh itself.

Categories