I want to achieve a function of when I click the group the activity will do something background and when it has finished ,I want the groupview has something different.So I want to know how to fresh the groupview.
Well you better post some code to get the right advice on your issue but based on the text inside your question I can suggest these steps,
setOnGroupExpandListener(new OnGroupExpandListener(){..}); on your expandable listview.
You will get onGroupExpand method where you will write your logic to refresh or do whatever you need to do in background in an Asynctask obviously.
Once you are done with the background work then inside onPostExecute() of your Asynctask set the adapter again or just call notifydatasetchanged if you have modified the data a bit.
Related
I'd like to change my listView items dynamically. The algorithm goes like this:
1.I create the default view for my listView using adapter and show it to user. The list item contains Imageview, textview and another imageview which is invisible.
2.The data is beeing dowloaded in the meantime.
3. after my data is downloaded, I'd like to check whether my listview contains any of downloaded items. If yes, I want to make visible the previously invisible ImageView for this item.
Should I add some kind of method to my adapter, call it and then call invalidateViews(), notifyDataSetChanged(), or notifyDataSetInvalidated()? Or maybe there is some kind of standard way to find my adapter's item by Id or sth and then make visible the imageview for this item?
This list update operation is the only one left to implement for me.
Should I add some kind of method to my adapter, call it and then call invalidateViews(), notifyDataSetChanged(), or notifyDataSetInvalidated()?
Yes, exactly.
maybe there is some kind of standard way to find my adapter's item by Id or sth and then make visible the imageview for this item?
Above mentioned way is enough. There is no such standard or special way to do it AFAIK.
Read the Displaying Bitmaps Efficiently introduction and in particular the part about Handle Concurrency. This will give you all the information you need.
I have created custom listview with baseadapter.
it's working fine.
but I am calculating total amout when adatper is filliup via getview method.
My question is when I can find that adapter has completed his process of filling up listview?
When adapter called getview() method for last the record after that I want to broadcast message. How can I do?
Thanks.
Adapter does not fill listview completely. It will only fill views that are on the screen ( it also depends on framework cos companies like Samsung, Sony do change the android framework a lot)
The best you should do is call Notifydatasetchanged on adapter and then handle call after that.
Views and whatever adapter needs to call should be done by then
Can you please explain more what you want to achieve. You probably need to use the adapter data and not think about touching its UI part?
I have a ListView which gets items from a db (using SimpleCursorAdapter). After the list is populated I want to scroll it to a given position. I can't find the right place to do this.
Right now I set a "need to scroll" flag before running the query. Then I check this flag in setViewValue() and if it's set I scroll the list and reset the flag. Although this works, I don't think it's the best way to do it.
Any other ideas about how to perform some actions when a ListView is populated?
Perhaps you're looking for a "scroll-to" like method. Here's a quick reference.
Ok, I think I solved this. Derived my own adapter from SimpleCursorAdapter, overloaded notifyDataSetChanged method so that it scrolls the list when necessary after calling super's method. Looks working.
I am trying to get a button to show up on my list item (declared as android:visibility:"gone" in the XML) to show as visible when I perform some gestures on it. However, how can I actually notify the getView method correctly to display the button only on the listview item?
I tried using getChildAt(position) which ended up displaying several buttons at once.
I tried passing in the position for example I detected that the gesture was performed on from pointToPosition and passed it into the adapter for the getView method to display, but it had the same problem of displaying several at once.
do anyone know how can I solve this?
I think you may have a misunderstanding of how Adapter.getView() works its meant to create or reuse layouts when rendering the ListView it also needs to be fast so conditional manipulation in this method is discouraged. Although ListView.getChildAt() may work it does not effectively use the API. Your adapter will have a setViewBinder() unless you're using an ArrayAdapter (if so I suggest using SimpleAdapter because of the additional features). Use your ViewBinder implementation to switch the visibility of the button.
If you'd prefer to continue to use ArrayAdapter use ListView.getChildAt(int) to findViewById(R.id.your_button).setVisibility(). If this is what you already tried and its setting all the buttons visible then please post the related code.
I am trying to update the ListView with periodic updates taken from an HTTP response. Now, I am thinking that because this is very specific to my application, I can get away by using a background thread and then updating the ListView using the magic UI thread. The last time I tried this, I had to remove the entire adapter of the ListView and then fill it up again so it worked. But this time, what I am trying to do is a more "smooth" scrolling ListView... something like a scrolling ticker... Is there a different approach to achieve this?
That depends on the Adapter. If you are using an ArrayAdapter, you can call add() on the ArrayAdapter itself to add items on the fly.