androidlistviewlazylist

Android LazyList initial load of listview doesn't show images until scrolling


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;
}
}

Solution

  • 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));