You're welcome. :-) Have a great weekend. On Oct 29, 3:50 pm, stanchat <[email protected]> wrote: > Awesome! This worked like a charm. > > On Oct 28, 2:54 pm, Streets Of Boston <[email protected]> wrote: > > > > > When you create a brand-new convertView (v) in your getView(...) > > method (within the if (v==nul) {....} block), call the > > setOnCheckChangeListener on the SelectActor checkbox in 'v'. > > > Every time when getView(...) is called, attach your Actor to the > > Selector checkbox, by calling setTag: > > public View getView(....) { > > ... > > ... > > > SelectActor.setTag(null); // prevent eternal looping > > SelectActor.setChecked(a.isSelected); > > SelectActor.setTag(a); > > ... > > } > > > Then in the OnCheckChangedListener implement this > > public void onCheckedChanged (CompoundButton buttonView, boolean > > isChecked) { > > ... > > Actor a = (Actor)buttonView.getTag(); > > if (a != null) { > > a.isSelected = isChecked; > > > // The call below may not be necessary.... > > ard.notifyDataSetChanged(); > > } > > } > > > On Oct 28, 1:17 pm, stanchat <[email protected]> wrote: > > > > This will work for the AddAll and ClearAll buttons. How do I make it > > > work for an indiviudal actor (clicking Checkbox for actor) such that > > > the isSelected field gets changed properly. I see I have the > > > setOnCheckedChangeListener for a checkbox but how do I get the > > > position of the ActorList to actually change. > > > > On Oct 28, 10:30 am, Streets Of Boston <[email protected]> > > > wrote: > > > > > I see that in the onClick, you try to access the list's (GridView's) > > > > items by accessing its child-views. This is not correct. > > > > > Child-views are re-used for when displaying items in the > > > > listview(GridView). When a child-view (list-item view) scrolls off the > > > > screen, it is re-used for ones that start scrolling into the visible > > > > screen. > > > > > Also: > > > > The call 'Actor a = (Actor) gv.getAdapter().getItem(position)' looks > > > > incorrect. > > > > '// Actor a = items.get(position);' should be un-commented. This is > > > > the correct way of getting your Actor. > > > > > Add a field to Actor that check if it is selected: > > > > public class Actor ... { > > > > boolean isSelected; > > > > ... > > > > > } > > > > > In the onClick of your Select-All button, call your adapter, not your > > > > GridView, to obtain all the Actors: > > > > > for (int i = 0; i < ard.getCount();; i++) { > > > > Actor a = (Actor)arg.getItem(i); > > > > a.isSelected = true; > > > > ... > > > > } > > > > ard.notifyDataSetChanged(); // this will call the adapter's > > > > getView(...) to be called. > > > > > Then in your adapter, do this: > > > > > public int getCount() { > > > > return items.size(); > > > > } > > > > > public Actor getItem(int position) { > > > > return items.get(position); > > > > } > > > > > public View getView(int position, View convertView, ViewGroup > > > > parent) { > > > > ... > > > > ... > > > > Actor a = getItem(position) > > > > CheckBox cb = v.findViewById(R.id.CheckBoxActor); > > > > cb.setChecked(a.isSelected); > > > > > TextView tv = v.findViewById(R.id.TextViewActor); > > > > tv.setText(a.ActorImageView.getText()); > > > > ... etc... > > > > > } > > > > > Never call your adapter's getView(....) method yourself. It will be > > > > called by the framework. It's a call-*back* function. > > > > > If you want to change the items in the list-view, do *not* change the > > > > list-item views (child-views) of the listview (GridView). Instead, > > > > change the data in the adapter, then call the adapter's > > > > 'notifyDataSetChanged()' method. > > > > > On Oct 28, 10:35 am, stanchat <[email protected]> wrote: > > > > > > I'm have a custom GridView Array Adapter. The problem for me is that > > > > > when the grid list gets large enough to scroll off the screen the > > > > > gridview and arraylist get out of sync. For instance in my case I > > > > > have code that checks if an actor is of type director the text color > > > > > should be red. if you scroll up and down my list enough times all the > > > > > actors text in my gridview will become red. The thing is that the > > > > > Gridview appearance actually looks fine its the backing data. Here is > > > > > the complete class. In the code you can see where I tried to override > > > > > getItem and getItemId but that didn't fix anything. > > > > > > ============================================================================= > > > > > package com.goldendoodlegames.android.hollywoodempire; > > > > > > import java.text.DecimalFormat; > > > > > import java.util.ArrayList; > > > > > import java.util.Comparator; > > > > > import java.util.List; > > > > > > import android.app.*; > > > > > import android.content.Context; > > > > > import android.content.Intent; > > > > > import android.graphics.Color; > > > > > import android.graphics.drawable.Drawable; > > > > > import android.media.MediaPlayer; > > > > > import android.net.Uri; > > > > > import android.os.*; > > > > > import android.text.Editable; > > > > > import android.text.InputFilter; > > > > > import android.text.TextWatcher; > > > > > import android.view.LayoutInflater; > > > > > import android.view.View; > > > > > import android.view.ViewGroup; > > > > > import android.view.View.OnClickListener; > > > > > import android.widget.ArrayAdapter; > > > > > import android.widget.BaseAdapter; > > > > > import android.widget.Button; > > > > > import android.widget.CheckBox; > > > > > import android.widget.EditText; > > > > > import android.widget.Filter; > > > > > import android.widget.Filterable; > > > > > import android.widget.GridView; > > > > > import android.widget.ImageView; > > > > > import android.widget.ListView; > > > > > import android.widget.TextView; > > > > > > public class ActorsView extends Activity { > > > > > > private static ArrayList<Actor> ActorList; > > > > > ActorRowAdapter ard; > > > > > GridView g1; > > > > > > // > > > > > private static class ActorRowAdapter extends > > > > > ArrayAdapter<Actor> { > > > > > private LayoutInflater mInflater; > > > > > private ArrayList<Actor> items; > > > > > > public ActorRowAdapter(Context context, int resource, > > > > > int textViewResourceId, > > > > > ArrayList<Actor> items) { > > > > > super(context, resource, textViewResourceId, > > > > > items); > > > > > this.items = items; > > > > > mInflater = LayoutInflater.from(context); > > > > > } > > > > > > // public int getCount() { > > > > > // return ActorList.size(); > > > > > // } > > > > > // > > > > > // public Actor getItem(int position) { > > > > > // return ActorList.get(position); > > > > > // } > > > > > // > > > > > // public long getItemId(int position) { > > > > > // return position; > > > > > // } > > > > > @Override > > > > > public View getView(int position, View convertView, > > > > > ViewGroup > > > > > parent) { > > > > > super.getView(position, convertView, parent); > > > > > View v = convertView; > > > > > if (v == null) { > > > > > v = > > > > > mInflater.inflate(R.layout.actorgridrow, null); > > > > > } > > > > > //Actor a = items.get(position); > > > > > GridView gv = (GridView) parent; > > > > > Actor a = (Actor) > > > > > gv.getAdapter().getItem(position); > > > > > if (a != null) { > > > > > TextView Actor = (TextView) > > > > > v.findViewById(R.id.TextViewActor); > > > > > CheckBox SelectActor = (CheckBox) v > > > > > > > > > > .findViewById(R.id.CheckBoxActor); > > > > > if (Actor != null) { > > > > > > > > > > Actor.setText(a.ActorImageView.getText()); > > > > > if > > > > > (a.Type.toLowerCase().equals("director")) > > > > > > > > > > Actor.setTextColor(Color.RED); > > > > > } > > > > > if (SelectActor != null) { > > > > > > > > > > SelectActor.setChecked(a.Visibility); > > > > > Drawable[] actDraw = > > > > > a.ActorImageView > > > > > > > > > > .getCompoundDrawables(); > > > > > > > > > > SelectActor.setBackgroundDrawable(actDraw[1]); > > > > > } > > > > > } > > > > > return v; > > > > > } > > > > > } > > > > > > @Override > > > > > public void onCreate(Bundle savedInstanceState) { > > > > > super.onCreate(savedInstanceState); > > > > > try {- Hide quoted text - > > - Show quoted text -... > > 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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

