我目前有一个自定义数组适配器来保存我的ParseUsers。我在这里要做的是通过在Adapter类中执行countInbackground来更新TextView
。但是,我在这里看到的是它并不总是在TextView
中返回正确的结果。我肯定这与getview等的行为有关。我只是为了一个更好的方法来做这件事。这是我的Adapter类。任何想要更好地处理这个问题的想法????
public class ParseUserAdapter extends ArrayAdapter<Users> {
ViewHolder holder;
private List<Users> mParseUsers,mUserId,mName;
Context mContext;
public ImageLoader imageLoader;
public interface OnDataChangeListener{
public void onDataChanged(int size);
}
OnDataChangeListener mOnDataChangeListener;
public void setOnDataChangeListener(OnDataChangeListener onDataChangeListener){
mOnDataChangeListener = onDataChangeListener;
}
public ParseUserAdapter(Context ctx, List<Users> parseUsers) {
super(ctx, R.layout.friend_row, parseUsers);
mUserId = parseUsers;
mName = parseUsers;
imageLoader= new ImageLoader(ctx);
}
public static class ViewHolder {
public TextView username;
public RoundedImageView profilepic;
public LinearLayout friend;
public FancyButton countView;
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/RobotoSlab-Bold.ttf");
// Typeface tf2 = Typeface.createFromAsset(context.getAssets(), "fonts/RobotoSlab-Bold.ttf");
Typeface tf3 = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Light.ttf");
LayoutInflater mInflater = (LayoutInflater) getContext()
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.friend_row, parent, false);
holder = new ViewHolder();
holder.username = (TextView) convertView.findViewById(R.id.username);
holder.profilepic = (RoundedImageView) convertView.findViewById(R.id.userProfilePicture);
holder.friend = (LinearLayout) convertView.findViewById(R.id.friend);
holder.countView = (FancyButton) convertView.findViewById(R.id.count_view);
convertView.setTag(holder);
if(mOnDataChangeListener != null) {
mOnDataChangeListener.onDataChanged(mUserId.size());
}
} else {
holder = (ViewHolder) convertView.getTag();
}
final Users userId = mUserId.get(position);
final Users name = mName.get(position);
ParseQuery<ParseObject> query = ParseQuery.getQuery("Music");
final ViewHolder finalHolder1 = holder;
query.whereEqualTo("facebookId",userId.getUserId());
query.whereDoesNotExist("soundfile");
query.countInBackground(new CountCallback() {
public void done(int count, ParseException e) {
if (e == null) {
String theCount = String.valueOf(count);
finalHolder1.countView.setText(theCount);
notifyDataSetChanged();
} else {
}
}
});
holder.username.setText(name.getName());
holder.username.setTypeface(tf3);
return convertView;
}
}
}