I am using a SimpleCursorAdapter and having a similar problem with pre-
checking certain entries.  This is my experimental code that I am
trying immediately following the instantiation of the adapter:

                adapter = new SimpleCursorAdapter(this,
                                
android.R.layout.simple_list_item_multiple_choice, c,
                                new String[] { Contacts.PeopleColumns.NAME },
                                new int[] { android.R.id.text1 });

                // TODO TEST CODE
                CheckedTextView cb = (CheckedTextView) adapter.getView(0, null,
null);
                cb.setChecked(true);

The list appears and the first entry is *not* checked.  Any ideas?

Thanks,
Scott



On Oct 8, 4:16 pm, Streets Of Boston <flyingdutc...@gmail.com> wrote:
> YourListViewis only for display.
> Your ListAdapter (in your case ArrayAdapter) is for getting and
> manipulating the actual data. Only it's 'getView' method provides a
> bridge between the data and the display-view...
>
> Iterate over the elements in your ArrayAdapter to determine if one
> item is selected or not.  (Do not iterate over the elements (child-
> views) of theListView.)
>
> Each element in your ArrayAdapter should have a way to tell you if it
> is selected or not.
>
> Currently you use this ArrayAdapter<String>. This (<String>) is not
> enough. You need to know if a particular String in this adapter has
> been selected or not at some point:
>
> public class SelectableString {
>    public String soundTableName;
>    public boolean isSelected;
>
>    // Add this method, to avoid overriding getView in your
> ArrayAdapter.
>    public String toString() {
>       return soundTableName;
>    }
>
> }
>
> and then have a ArrayAdapter<SelectableString> instead.
>
> Then register an OnItemSelectedListener (or something similar) and
> implement this one to get the proper SelectableString from your
> ArrayAdapter and set the SelectableString's 'isSelected' element to
> true or false.
>
> Then, at other points in your code, you can just iterate over your
> ArrayAdapter and query each SelectableString's 'isSelected' member to
> check if it has been selected or not.
>
> On Oct 7, 11:02 pm, KhanAzul <mark.pes...@gmail.com> wrote:
>
> > Thank you for your response, and I can understand your confusion.
> > Yes, when I run this activity, my screen displays the title text, two
> > items in myListView(0 = "Big Sound", 1 = "Little Sound"), and the
> > footer text.  I can select either or both items, and when I press
> > Back, I can step through my onPause (you are correct here, pardon my
> > bad form) and watch the selection indices get saved to
> > "selectedSounds" preference.
>
> > From what I've observed through careful debugging, I'm not having any
> > issues saving the selections.  Nor am I having issues retrieving these
> > selections from preferences, or setting the ArrayAdapter to my
> >ListView.  The breakdown occurs when I try to set these items as
> > checked in theListViewwhen the activity starts back up.
>
> > > Don't use 'getChildCount' and 'getChildAt' method to check your
> > > preference-settings.
>
> > What is the proper method?  I think this is the crux of my question.
>
> > Again, I appreciate the help.  I think some further guidance is
> > needed.
>
> > On Oct 7, 3:30 pm, Streets Of Boston <flyingdutc...@gmail.com> wrote:
>
> > > 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 aListViewwith checkboxes, and I want some of the
> > > > checkboxes pre-selected.  TheListViewhas 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
> > > >ListViewreports 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{
> > > >        ListViewlstSounds;
> > > >         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";
> > > >  
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to