Your activity (and your list-view) is not yet visible in the onStart. Don't use 'getChildCount' and 'getChildAt' method to check your preference-settings.
BTW: If your activity is not yet visible, how can a user make a selection? Shouldn't you query in the onPause, for example. And also, the positions returned by the method getCheckedItemPositions () are the positions in your adapter (ArrayAdapter in your case). Your list-*view* positions (used in getChildAt) are not the same. You list- view will never have more children than the ones you can see. And the child-at postion 0 is the one on the top of the list-view. On Oct 7, 2:37 pm, KhanAzul <mark.pes...@gmail.com> wrote: > I want to display a ListView with checkboxes, and I want some of the > checkboxes pre-selected. The ListView has setAdapter called during > onCreate, and the list information appears when the screen is drawn. > However, when I attempt to set certain list items as checked, my > ListView reports getChildCount() = 0. > > My SharedPreferences contains a list of sounds that have been > previously selected, as a comma delimited string of list indices. > Because the list appears to have no children in onStart, my attempts > to set items as checked fails. > > On the good side, once the list is rendered, I can select entries and > hit Back, and my selection is stored to SharedPreferences correctly. > > How can I load my previous selection into the list? Should I be using > something else here? > > In the spirit of open source, here's my code, free to you :) > > ==================================================== > SoundLibrary.Java > ==================================================== > > import java.util.Hashtable; > > import android.app.Activity; > import android.content.Context; > import android.content.SharedPreferences; > import android.content.res.Resources; > import android.media.MediaPlayer; > import android.os.Bundle; > import android.util.SparseBooleanArray; > import android.view.View; > import android.view.View.OnLongClickListener; > import android.widget.ArrayAdapter; > import android.widget.ListView; > > public class SoundLibrary extends Activity{ > ListView lstSounds; > Hashtable<String, Integer> soundTable; > CharSequence[] soundNames; > CharSequence[] soundLocations; > OnLongClickListener previewListener; > static Context myContext; > static MediaPlayer player; > SharedPreferences prefs; > > @Override > public void onCreate(Bundle savedInstanceState) { > super.onCreate(savedInstanceState); > setContentView(R.layout.soundlibrary); > myContext = this.getApplicationContext(); > prefs = getSharedPreferences("myAppData", 0); > > soundTable = new Hashtable<String, Integer>(); > LoadSoundTable(); > lstSounds = (ListView)findViewById(R.id.lstSounds); > PopulateSoundList(); > lstSounds.setOnLongClickListener(new PreviewListener()); > } > > @Override > public void onStart() { > super.onStart(); > String[] selectedSoundsArray = > prefs.getString("selectedSounds", "").split(","); > for (int selI = 0; selI < selectedSoundsArray.length; selI++) > { > if (lstSounds.getChildCount() <= selI) { > break; > } > try { > > lstSounds.getChildAt(Integer.parseInt(selectedSoundsArray > [selI])).setSelected(true); > } catch (NumberFormatException e) { } > } > } > > @Override > public void onPause() { > super.onPause(); > StringBuffer sb = new StringBuffer(); > SparseBooleanArray sbaSelectedSounds = > lstSounds.getCheckedItemPositions(); > for (int sbaKey = 0; sbaKey < sbaSelectedSounds.size(); > sbaKey++) > { > if (sbaSelectedSounds.get(sbaKey, false)) > { > sb.append(String.valueOf(sbaKey)); > sb.append(','); > } > } > prefs.edit().putString("selectedSounds", > sb.toString()).commit(); > } > > private void LoadSoundTable() > { > Resources res = getResources(); > CharSequence[] soundNames = > res.getTextArray(R.array.sound_name); > CharSequence[] soundLocations = > res.getTextArray(R.array.sound_location); > > for (int i = 0; i < soundNames.length; i++) { > soundTable.put(soundNames[i].toString(), > > res.getIdentifier(soundLocations[i].toString(), "raw", > this.getPackageName())); > } > } > > private void PopulateSoundList() > { > ArrayAdapter<String> aa = new ArrayAdapter<String>(this, > android.R.layout.simple_list_item_multiple_choice, > soundTable.keySet().toArray(new > String[soundTable.keySet > ().size()])); > lstSounds.setAdapter(aa); > } > > private class PreviewListener extends Activity implements > OnLongClickListener { > public boolean onLongClick(View v) { > String previewSoundName = > lstSounds.getSelectedItem().toString(); > player = MediaPlayer.create(myContext, > > soundTable.get(previewSoundName).intValue()); > player.start(); > return true; > } > } > > } > > ==================================================== > soundlibrary.xml - in res/layout > ==================================================== > > <?xml version="1.0" encoding="utf-8"?> > <LinearLayout > xmlns:android="http://schemas.android.com/apk/res/android" > android:layout_width="fill_parent" > android:layout_height="wrap_content" > android:gravity="center" > android:orientation="vertical"> > > <TextView > android:layout_width="wrap_content" > android:layout_height="wrap_content" > android:id="@+id/txtTitle" > android:text="@string/sound_library_title"></TextView> > > <ListView > android:id="@+id/lstSounds" > android:layout_width="fill_parent" > android:layout_height="fill_parent" > android:choiceMode="multipleChoice" > android:clickable="true" > android:focusable="true" > android:longClickable="true"></ListView> > > <TextView > android:layout_width="wrap_content" > android:layout_height="wrap_content" > android:id="@+id/txtPreview" > android:text="@string/sound_library_preview"></TextView> > > </LinearLayout> > > ==================================================== > sounds.xml - in res/values > ==================================================== > <?xml version="1.0" encoding="utf-8"?> > <resources> > <string-array name="sound_name"> > <item>Big Sound</item> > <item>Little Sound</item> > </string-array> > <string-array name="sound_location"> > <item>test_big_sound</item> > <item>test_little_sound</item> > </string-array> > </resources> --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---