Move your setContentView(lv) right after retrieving the ListView ListView lv = getListView(); setContentView(lv); lv. SetTextFilterEnabled(true).
Move your setContentView(lv); right after retrieving the ListView ListView lv = getListView(); setContentView(lv); lv. SetTextFilterEnabled(true).
Perfect, that worked! Thanks! But why?
What changes when I call setContentView() before adding the listeners? – craesh Feb 11 '10 at 10:37 TBH, I don't know. I guess that events are linked to the activity and not the view itself (this is just a guess) - Please accept the answer if you think it's the right one – ccheneson Feb 11 '10 at 10:44 Apparently the above comment is not right - From developer.android.Com/intl/de/guide/topics/ui/ui-events.
Html, "An event listener is an interface in the View class that contains a single callback method. These methods will be called by the Android framework when the View to which the listener has been registered is triggered by user interaction with the item in the UI." - Still trying to find some answers – ccheneson Feb 11 '10 at 10:48 Maybe... but very strange... in OOP, it should make no difference, if you first register an object and then change it's state, or first set it's state and then pass it's reference to your framework... But anyway, thanks for your answer. Of course you get it accepted :) – craesh Feb 11 '10 at 10:52 Since you can pass a XML layout to setContentView, onCreate will inflate it and add the UI to the view hierarchy.
Maybe setting the view before associating any event is better for a common workflow (See the different setContentView signatures), again this is just my interpretation :) – ccheneson Feb 11 '10 at 11:09.
When you add layouts with setContentView, views within that layouts get freshly instanciated. The ListActivity has a very simple Layout by default (read about it here), even if you don't add your own layout. So basically in your first example: First you add a listener to the default ListView within the ListActivity Then you throw that ListView away by using setContentView to instanciate a new layout with a new ListView Then you never register a new listener to the new ListView from your new layout.
Whereas when you pull setContentView up in your code you only ever work with your own ListView and everything works as expected.
– ccheneson Feb 11 '10 at 12:29 From the doc "ListActivity hosts a ListView object that can be bound to different data sources" . Since setAdapter is called on (this), when it's instantiate, I guess that's why items are kept. – ccheneson Feb 11 '10 at 12:35 Thanks for your explanation!
Is this a general rule? Do I always have to first instantiate my view through setContentView() and then set all listeners and other settings? I cannot find anything in the official docs about this.
Do you know any further resources? Are there other pitfalls? – craesh Feb 13 '10 at 16:49 1 Yep, this is a general rule when using layouts on normal activities and starting the activity anew.
You can try yourself: If you call findViewById before ever setting the view in onCreate() you'll get a null-reference back. The exception are Activities like the ListActivity that come with preinstanciated Views. The findViewById-javadoc (developer.android.
Com/reference/android/app/…) talks about "XML that was processed in onCreate(Bundle)" which imho can only mean the setContentView() in onCreate. – rflexor Feb 14 '10 at 8:08 Great! Thanks!
:) – craesh Feb 14 '10 at 8:20.
I'm developing an simple application on Android, where some items are shown on a list. The user may click on one, taking him to a further activity. But my OnItemClickListener does not get called!
I've found this very similar question, but the solution (disallow the list item view to get focus) does not work for me. However, a long click gets catched - my OnItemLongClickListener gets called. Please have a look at the following code and try it yourself.
This is a simplified version of my code, showing the buggy behavior.
I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.