Android的LazyList初始加载列表视图在滚动之前不会显示图像

时间:2013-09-25 05:46:25

标签: android listview lazylist

我目前正在使用LazyList视图:https://github.com/thest1/LazyList

一切都很有效但是listview的初始加载。没有图像正在加载。我必须实际向下滚动然后备份以填充图像。下面是我正在使用的适配器的代码。我在这里做错了什么?

更新:请注意,我取出了图片视图的标签以查看它是否有帮助,但我仍然得到相同的结果。

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

2 个答案:

答案 0 :(得分:1)

使用AndroidQuery。 ImageLoader不是一个通用的ImageLoader,Android为我们提供了AndroidQuery及其使用的awsom,非常快速和高效。

从这里下载jar:http://code.google.com/p/android-query/ 将此jar添加到Build路径中。

private AQuery androidAQuery;
androidAQuery=new AQuery(this);
                androidAQuery.id(YOUR IMAGE VIEW).image(YOUR IMAGE URL, true, true,DEFUALT IMAGE(optional));

答案 1 :(得分:-2)

试试这个,在manifest.xml文件中添加以下权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />