Hi, I've identified a problem with a SeekBar being inside a ListView, and a problem with a SeekBar being inside a Preference on Android 2.2. I'm trying to figure out if I'm doing something wrong, or this is a limitation/bug of Android.
The first problem with the ListView is that I am unable to use the trackball/arrow keys to move the SeekBar when it is inside a ListView. This seems to apply to all versions of Android 1.5-2.2. The following simple example shows this: public final class TestActivity extends ListActivity { public SeekBar makeSeekBar() { SeekBar s = new SeekBar(this); s.setMax(10); s.setKeyProgressIncrement(1); return s; } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(new BaseAdapter() { @Override public int getCount() { return 5; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { return makeSeekBar(); } }); } } The previous example code creates a ListActivity with a simple ListAdapter which displays 5 SeekBars. Each SeekBar seems to work correctly when in touch mode, but I am unable to move the bar left of right by using the arrow keys (in the emulator) or the trackball (on my G1). If I instead make a Activity with a SeekBar in it, then the arrow keys/track ball can easily move the SeekBar left and right. Is this a limitation? or just an oversight? or am I missing something? The second problem (with led me to the first problem), is I have a custom Preference class called SeekBarPreference, which if you can't guess displays a SeekBar on a PreferenceActivity. It doesn't display the SeekBar in a popup dialog, but instead directly in the PreferenceActivity[1]. This works great in touch mode, unless I use Android 2.2. On Android 2.2 it seems every time I start to slide the bar left or right, as soon as it moves one notch a onStopTrackingTouch is received, and the bar no longer slides. So basically the SeekBar will only move to where you click and no longer slides. Under Android 1.6-2.1 the slide behaviour worked fine!. I did some debugging, and the call stack from the onStopTrackingTouch is as follows: SeekBarPreference.onStopTrackingTouch(SeekBar) line: 110 SeekBar.onStopTrackingTouch() line: 115 SeekBar(AbsSeekBar).onTouchEvent(MotionEvent) line: 311 SeekBar(View).dispatchTouchEvent(MotionEvent) line: 3766 RelativeLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 936 LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 936 LinearLayout(ViewGroup).dispatchDetachedFromWindow() line: 1148 ListView(ViewGroup).removeDetachedView(View, boolean) line: 2333 AbsListView.access$2700(AbsListView, View, boolean) line: 72 AbsListView$RecycleBin.addScrapView(View) line: 4068 ListView.layoutChildren() line: 1514 ListView(AbsListView).onLayout(boolean, int, int, int, int) line: 1147 ListView(View).layout(int, int, int, int) line: 7035 FrameLayout.onLayout(boolean, int, int, int, int) line: 333 FrameLayout(View).layout(int, int, int, int) line: 7035 PhoneWindow$DecorView(FrameLayout).onLayout(boolean, int, int, int, int) line: 333 PhoneWindow$DecorView(View).layout(int, int, int, int) line: 7035 ViewRoot.performTraversals() line: 1045 ViewRoot.handleMessage(Message) line: 1727 ViewRoot(Handler).dispatchMessage(Message) line: 99 >From this I can see that the ListView is removing the view with the SeekBar in it (inside removeDetachedView) which calls dispatchDetachedFromWindow and fires a MotionEvent.ACTION_CANCEL event, causing the Tracking to stop. I have not been able to figure out why the ListView is detaching the SeekBar's view, and this does not seem to happen in my simple ListView case. I will continue to debug the problem and generate a simple test case others can use, but I thought I better ask. thanks for any help on either problems Andrew [1] Shameless plug, but if anyone wants to see the SeekBarPreference in action, download my new app "MusicGrid" and view the settings. As I say the problem only appears on 2.2 phones. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en