TL;DR - I have an array adapter, filled by an ArrayList of User object, and I want to print their order numbers - 1st, 2nd, 3rd... etc - while scrolling fast back and forth.. those numbers get mixed..
instead of 1,2,3,4 after scrolling fast back and forth I get 1,2,9,4 for example..
I don't get why this happens, I've tried several stuff to solve it but with no success, I even took that text view out of the view holder to see if it helps but no success there too.
here's my adapter:
public class HomeHallOfFameAdapter extends ArrayAdapter<User> {
private HomeFragment fragment;
private ArrayList<User> data;
int page;
public HomeHallOfFameAdapter(Context context, ArrayList<User> data, HomeFragment fragment, int page) {
super(context, 0);
this.data = data;
this.fragment = fragment;
this.page = page;
}
@Override
public int getCount() {
return data != null ? data.size() : 0;
}
@Override
public User getItem(final int position) {
return data.get(position);
}
@Override
public long getItemId(final int position) {
//only used for adapters connected to a cursor.
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
MyHolder holder = null;
final User user = data.get(position);
//initiallize the views
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.home_frag_hall_of_fame_item, null);
holder = new MyHolder();
holder.profileImage1 = (ImageView) convertView.findViewById(R.id.home_hallofame_image);
convertView.setTag(holder);
} else {
holder = (MyHolder) convertView.getTag();
}
final TextView titleRank = (TextView) convertView.findViewById(R.id.home_hallofame_title);
final String numberEnding = MainScreenActivity.getInstance().NumberWithSuffix(position+1);
titleRank.setText(numberEnding);
loadImage(user.getImages().get(0), holder.profileImage1);
return convertView;
//return super.getView(position, convertView, parent);
}
private class MyHolder {
//TextView titleRank;
ImageView profileImage1; //fameBlueBtn;
}
}
the problem is the titleRank textView..
NumberWithSuffix is just a method that implements the number ending:
//method to get the currect number endings.
public String NumberWithSuffix(int number) {
String outputNumber = "";
String numberString = String.valueOf(number);
if (String.valueOf(number).endsWith("11")) {
outputNumber = numberString + "th";
} else if (String.valueOf(number).endsWith("12")) {
outputNumber = numberString + "th";
} else if (String.valueOf(number).endsWith("13")) {
outputNumber = numberString + "th";
} else if (String.valueOf(number).endsWith("1")) {
outputNumber = numberString + "st";
} else if (String.valueOf(number).endsWith("2")) {
outputNumber = numberString + "nd";
} else if (String.valueOf(number).endsWith("3")) {
outputNumber = numberString + "rd";
} else {
outputNumber = numberString + "th";
}
return outputNumber.trim();
}
any idea what's my problem?
thanks for any help.
So.. I've solved this issue.. my code was ok, as I mentioned, it works fine in a vertical list view, but this problem happens in a horizontal list view.. I removed the list view github library i was using and switched to Horizontal Recycler View.. it works great now !