I am currently using the LazyList view from here: https://github.com/thest1/LazyList
Everything is working great BUT the initial load of the listview. No images are loading. I have to actually scroll down and then back up for the images to populate. Below is the code for the adapter that I am using. What am I doing wrong here?
UPDATE: Note that I took out the tags for the imageviews to see if it would help, but I still get the same results.
public class BattleAdapter extends ArrayAdapter<Battle> {
private ArrayList<Battle> data = null;
private Context context;
private int layoutResourceId;
private ImageLoader imageLoader;
public BattleAdapter(Context context, int layoutResourceId,
ArrayList<Battle> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
this.imageLoader = new ImageLoader(context);
}
static class BattleHolder {
public CropImageView imageRight;
public CropImageView imageLeft;
public TextView displayNameRight;
public TextView displayNameLeft;
public TextView numComments;
public TextView numVotes;
public TextView timeLeft;
public ImageView winnerImg1;
public TextView winnerTxt1;
public ImageView winnerImg2;
public TextView winnerTxt2;
public TextView tiedTxt1;
public TextView tiedTxt2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
BattleHolder holder = null;
if (convertView == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
holder = new BattleHolder();
convertView = inflater.inflate(R.layout.versus_list_item, null);
holder.imageLeft = (CropImageView) convertView
.findViewById(R.id.versus_challenger);
holder.imageLeft.setClickable(false);
holder.imageRight = (CropImageView) convertView
.findViewById(R.id.versus_challenged);
holder.imageRight.setClickable(false);
holder.displayNameLeft = (TextView) convertView
.findViewById(R.id.versus_challenger_name);
holder.displayNameRight = (TextView) convertView
.findViewById(R.id.versus_challenged_name);
holder.numVotes = (TextView) convertView
.findViewById(R.id.num_votes);
holder.numComments = (TextView) convertView
.findViewById(R.id.num_comments);
holder.timeLeft = (TextView) convertView
.findViewById(R.id.time_left);
holder.winnerImg1 = (ImageView) convertView
.findViewById(R.id.winner_img1);
holder.winnerImg2 = (ImageView) convertView
.findViewById(R.id.winner_img2);
holder.winnerTxt1 = (TextView) convertView
.findViewById(R.id.winner_img1_txt);
holder.winnerTxt2 = (TextView) convertView
.findViewById(R.id.winner_img2_txt);
holder.tiedTxt1 = (TextView) convertView
.findViewById(R.id.tie_txt1);
holder.tiedTxt2 = (TextView) convertView
.findViewById(R.id.tie_txt2);
holder.timeLeft.setSelected(true);
convertView.setTag(holder);
} else {
holder = (BattleHolder) convertView.getTag();
}
Battle battle = data.get(position);
if (battle != null) {
User challenger = battle.getChallenger();
User challenged = battle.getChallenged();
holder.displayNameLeft.setText(challenger.getDisplayName());
holder.displayNameRight.setText(challenged.getDisplayName());
holder.numComments.setText(Integer.toString(battle
.getCommentCount()));
holder.numVotes.setText(Integer.toString(battle.getVoteCount()));
if (battle.getTimeLeft() != null) {
if (battle.getTimeLeft().startsWith("-")) {
holder.timeLeft.setText("Time's up. Calculating winner");
} else if (battle.getTimeLeft().endsWith("responded")) {
String newString = String.format(battle.getTimeLeft(),
challenged.getDisplayName());
holder.timeLeft.setText(newString);
} else
holder.timeLeft.setText(battle.getTimeLeft());
}
imageLoader.DisplayImage(challenger.getPicPath(), holder.imageLeft);
imageLoader.DisplayImage(challenged.getPicPath(), holder.imageRight);
if (battle.getWinnerID() == -5) {
holder.winnerImg1.setVisibility(View.VISIBLE);
holder.winnerImg2.setVisibility(View.VISIBLE);
holder.winnerTxt2.setVisibility(View.INVISIBLE);
holder.winnerTxt1.setVisibility(View.INVISIBLE);
holder.tiedTxt1.setVisibility(View.VISIBLE);
holder.tiedTxt2.setVisibility(View.VISIBLE);
}
if (battle.getWinnerID() != 0 && battle.getWinnerID() != -1) {
if (challenger.getUserID() == battle.getWinnerID()) {
holder.winnerImg1.setVisibility(View.VISIBLE);
holder.winnerTxt1.setVisibility(View.VISIBLE);
holder.winnerImg2.setVisibility(View.VISIBLE);
holder.winnerTxt2.setVisibility(View.INVISIBLE);
holder.tiedTxt1.setVisibility(View.INVISIBLE);
holder.tiedTxt2.setVisibility(View.INVISIBLE);
}
else if (challenged.getUserID() == battle.getWinnerID()) {
holder.winnerImg2.setVisibility(View.VISIBLE);
holder.winnerTxt2.setVisibility(View.VISIBLE);
holder.winnerImg1.setVisibility(View.VISIBLE);
holder.winnerTxt1.setVisibility(View.INVISIBLE);
holder.tiedTxt1.setVisibility(View.INVISIBLE);
holder.tiedTxt2.setVisibility(View.INVISIBLE);
}
}
if (battle.getWinnerID() == 0 || battle.getWinnerID() == -1) {
holder.winnerImg1.setVisibility(View.INVISIBLE);
holder.winnerTxt1.setVisibility(View.INVISIBLE);
holder.winnerImg2.setVisibility(View.INVISIBLE);
holder.winnerTxt2.setVisibility(View.INVISIBLE);
holder.tiedTxt1.setVisibility(View.INVISIBLE);
holder.tiedTxt2.setVisibility(View.INVISIBLE);
Log.i("BattleAdapter", "No winner");
}
}
return convertView;
}
}
Use AndroidQuery for this. ImageLoader is not anUniversal ImageLoader, Android has provided us AndroidQuery and its awsom to use, very fast and efficient.
Download jar from here: http://code.google.com/p/android-query/ Add this jar to your Build path.
private AQuery androidAQuery;
androidAQuery=new AQuery(this);
androidAQuery.id(YOUR IMAGE VIEW).image(YOUR IMAGE URL, true, true,DEFUALT IMAGE(optional));