1

So my problem is this. I have a listview with a viewflipper in each row. When the data become more and they dont fit in the screen, when i click on a row to enable the viewflipper, it flips the row but also it flips another random row below the screen.( I can see it if I scroll down)

Sometimes if I scroll up and down again the flipped row (the second one) switches back to normal and flipped again.

here is my adapter

public class HistoryBaseAdapter extends BaseAdapter {

private static ArrayList<HistoryResults> searchArrayList;
private Context CONTEXT;


public HistoryBaseAdapter(Context context, ArrayList<HistoryResults> results, boolean length) {
    searchArrayList = results;
    mInflater = LayoutInflater.from(context);
    log_length = length;
    CONTEXT = context;
}

@Override
public int getCount() {
    return searchArrayList.size();
}

@Override
public Object getItem(int position) {
    return searchArrayList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.history_row_view, null);
        holder = new ViewHolder();

        holder.flipper = (ViewFlipper) convertView.findViewById(R.id.flipper);
        holder.flipper.setInAnimation(AnimationUtils.loadAnimation(CONTEXT, R.anim.slide_in));
        holder.flipper.setOutAnimation(AnimationUtils.loadAnimation(CONTEXT, R.anim.slide_out));



        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.flipper.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            holder.flipper.showNext();

        }
    });
    return convertView;
}

static class ViewHolder {

    ViewFlipper flipper;


}

}

Does anyone know what is wrong??

Alex Fragotsis
  • 1,248
  • 18
  • 36
  • 1
    This is because listview recycles view. check this blog might help http://graphics-geek.blogspot.in/search?updated-max=2013-07-12T09:08:00-07:00&max-results=7 although it may not directly help you solve your problem – Raghunandan Apr 01 '14 at 14:46

1 Answers1

1

Actually @Raghunandan that helped!! https://www.youtube.com/watch?v=8MIfSxgsHIs

I just added 2 lines

holder.flipper.setOnClickListener(new OnClickListener() {

        boolean hasTransientState = true;

        @Override
        public void onClick(View v) {
            holder.flipper.showNext();
            holder.flipper.setHasTransientState(hasTransientState);
            hasTransientState = !hasTransientState;

        }
    });

I'm not sure if it's the more efficient way to do this but it works! Thanks!!

Alex Fragotsis
  • 1,248
  • 18
  • 36