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 {
> >                         setContentView(R.layout.actorslayout);
> >                 } catch (Exception ex) {
> >                         ex.printStackTrace();
> >                 }
> >                 ActorList = (ArrayList<Actor>)
> > HollyWoodEmpire.extGM.CurrentPlayer.ActorInventory;
>
> >                 Button btnSelectAllActors = (Button)
> > findViewById(R.id.ButtonSelectAllActors);
> >                 btnSelectAllActors.setOnClickListener(new OnClickListener() 
> > {
> >                         public void onClick(View v) {
> >                                 int lc = g1.getChildCount();
>
> >                                 for (int i = 0; i < lc; i++) {
> >                                         View gvw = (View) g1.getChildAt(i);
> >                                         // View vw = 
> > g1.getAdapter().getView(i, null, null);
> >                                         CheckBox SelectActor = (CheckBox) 
> > gvw
> >                                                         
> > .findViewById(R.id.CheckBoxActor);
> >                                         SelectActor.setChecked(true);
>
> >                                 }
>
> >                         }
> >                 });
>
> >                 Button btnClearAllActors = (Button)
> > findViewById(R.id.ButtonClearAllActors);
> >                 btnClearAllActors.setOnClickListener(new OnClickListener() {
> >                         public void onClick(View v) {
> >                                 int lc = g1.getChildCount();
>
> >                                 for (int i = 0; i < lc; i++) {
> >                                         View gvw = (View) g1.getChildAt(i);
> >                                         // View vw = 
> > g1.getAdapter().getView(i, null, null);
> >                                         CheckBox SelectActor = (CheckBox) 
> > gvw
> >                                                         
> > .findViewById(R.id.CheckBoxActor);
> >                                         SelectActor.setChecked(false);
>
> >                                 }
>
> >                
>
> ...
>
> read more »- Hide quoted text -
>
> - Show quoted text -

-- 
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

Reply via email to