I have a List view, I populate the rows through the mysql database.
This is an idea of ββwhat I did:

These names that you saw come from my database, and PLAY ImageView from my list of layouts that appears on each row (when I add a row to my database).
Now my problem is that I installed a click listener on this play button (the target switches it to pause ImageView, etc.). It also changes other play buttons from other lines, but not all of them. Therefore, I think that I do not hold this position, right? Can you help me?
This is my snippet:
public class XXXUpdatesFragment extends Fragment implements AsyncResponse ,AdapterView.OnItemClickListener{ View view ; private ArrayList<Product> productList; private ListView lvProduct; private FunDapter<Product> adapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.xxx_updates_layout, container, false); ImageLoader.getInstance().init(UILConfig.config(getActivity())); lvProduct = (ListView)view.findViewById(R.id.lvProduct); PostResponseAsyncTask taskRead = new PostResponseAsyncTask(getActivity(), this); taskRead.execute("http://symphonyrecords.6te.net/product.php"); return view; }
This is my product class:
public class Product implements Serializable { @SerializedName("pid") public int pid; @SerializedName("name") public String name; @SerializedName("qty") public int qty; @SerializedName("price") public String description; }
And this is my adapter:
public class FunDapter<T> extends BaseAdapter implements Filterable { private boolean paused = true; protected List<T> mDataItems; protected List<T> mOrigDataItems; protected LongExtractor<T> idExtractor; protected final Context mContext; private final int mLayoutResource; private final BindDictionary<T> mBindDictionary; private int oddColorRes; private int evenColorRes; private FunDapterFilter<T> funDapterFilter; private Filter mFilter; public FunDapter(Context context, List<T> dataItems, int layoutResource, BindDictionary<T> dictionary) { this(context, dataItems, layoutResource, null, dictionary); } public FunDapter(Context context, List<T> dataItems, int layoutResource, LongExtractor<T> idExtractor, BindDictionary<T> dictionary) { this.mContext = context; this.mDataItems = dataItems; this.mOrigDataItems = dataItems; this.mLayoutResource = layoutResource; this.idExtractor = idExtractor; this.mBindDictionary = dictionary; } public void updateData(List<T> dataItems) { this.mDataItems = dataItems; this.mOrigDataItems = dataItems; notifyDataSetChanged(); } @Override public int getCount() { if (mDataItems == null || mBindDictionary == null) return 0; return mDataItems.size(); } @Override public T getItem(int position) { return mDataItems.get(position); } @Override public boolean hasStableIds() { if(idExtractor == null) return super.hasStableIds(); else return true; } @Override public long getItemId(int position) { if(idExtractor == null) return position; else return idExtractor.getLongValue(getItem(position), position); } @Override public View getView(final int position, View convertView, ViewGroup parent) { View v = convertView; final GenericViewHolder holder; if (null == v) { LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(mLayoutResource, null); holder = new GenericViewHolder(); holder.root = v; holder.playPause=(ImageView)v.findViewById(R.id.playPause); holder.playPause.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { if (paused) { holder.playPause.setImageResource(R.drawable.ic_pause); paused=false; } else { paused = true; holder.playPause.setImageResource(R.drawable.ic_play); } }}); FunDapterUtils.initViews(v, holder, mBindDictionary); v.setTag(holder); } else { holder = (GenericViewHolder) v.getTag(); } final T item = getItem(position); showData(item, holder, position); return v; } private void showData(T item, GenericViewHolder holder, int position) { if (oddColorRes > 0 && evenColorRes > 0) { if (position % 2 == 0) { holder.root.setBackgroundColor(mContext.getResources().getColor(evenColorRes)); } else { holder.root.setBackgroundColor(mContext.getResources().getColor(oddColorRes)); } } FunDapterUtils.showData(item, holder, position, mBindDictionary); } public FunDapter<T> setAlternatingBackground(int oddColorRes, int evenColorRes) { if (oddColorRes <= 0 || evenColorRes <= 0) { throw new IllegalArgumentException("Color parameters are illegal"); } this.oddColorRes = oddColorRes; this.evenColorRes = evenColorRes; return this; } public void setIdExtractor(LongExtractor<T> idExtractor) { this.idExtractor = idExtractor; } @Override public Filter getFilter() { return mFilter; } public void initFilter(FunDapterFilter<T> filter) { if (filter == null) throw new IllegalArgumentException("Cannot pass a null filter to FunDapter"); this.funDapterFilter = filter; mFilter = new Filter() { @Override protected void publishResults(CharSequence constraint, FilterResults results) { List<T> list = (List<T>) results.values; if (results.count == 0) { resetData(); } else { mDataItems = list; } notifyDataSetChanged(); } @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); if (constraint == null || constraint.length() == 0) { results.values = mOrigDataItems; results.count = mOrigDataItems.size(); } else { List<T> filter = funDapterFilter.filter(constraint.toString(), mOrigDataItems); results.count = filter.size(); results.values = filter; } return results; } }; } public void resetData() { mDataItems = mOrigDataItems; } }
A week has passed when I am struggling with this, I would be so grateful if you would help me with this.