1

私のアプリケーションにはリストビューがあり、リストビューの行はimageViewとTextviewで構成されています。アプリケーションは、Web から画像をダウンロードして、行レイアウトに imageview を設定します。リストビューを上下にスクロールすると、画像が再ダウンロードされるという問題がありました。このため、ViewHolderパターンを使用してリスト項目を保存しました。問題は修正されましたが、今回は新しい問題が発生しました。

Listview には 15 行あります。そのため、リストの一番下にある項目は表示されません。リストを下にスクロールしてアイテムを表示すると、リストの一番上にあるアイテムが lisview の最後に来ます。また、リストを上にスクロールすると、リストの最後のアイテムがリストの一番上に来ます。

そのため、表示する必要のある値や行は表示されません。

私の getView() メソッドの最後の状態は..

@Override
    public View getView(int position, View convertView, ViewGroup parent) {


        ViewHolder viewHolder;

            if (convertView == null) {

                convertView = mInflater.inflate(R.layout.row_layout, null);

                TextView programName = (TextView)convertView.findViewById(R.id.programName);
                TextView programTime = (TextView)convertView.findViewById(R.id.programTime);
                TextView programState = (TextView)convertView.findViewById(R.id.programState);
                ImageView programImage = (ImageView)convertView.findViewById(R.id.programImage);


                programName.setText(values.programNames.get(position));
                programTime.setText(values.programTimes.get(position));
                new imageDownload(programImage).execute(values.programImageUrls.get(position)); 

                viewHolder = new ViewHolder();
                viewHolder.p_Name = programName;
                viewHolder.p_Time = programTime;
                viewHolder.p_State = programState;
                viewHolder.p_Image = programImage;

                convertView.setTag(viewHolder);

            }else{

                viewHolder = (ViewHolder) convertView.getTag();
            }

            return convertView;
        }

私のビューホルダー...

public static class ViewHolder {
     TextView p_Name;
     TextView p_Time;
     TextView p_State;
     ImageView p_Image;
}

本当にありがとうございました

4

3 に答える 3

0

回答ありがとうございます。画像にピカソを使用することにしました。以下のようにコードを変更しただけです

@Override
public View getView(int position, View convertView, ViewGroup parent) {

 ViewHolder viewHolder;

    if (convertView == null) {

        convertView = mInflater.inflate(R.layout.row_layout, null);

        TextView programName = (TextView)convertView.findViewById(R.id.programName);
        TextView programTime = (TextView)convertView.findViewById(R.id.programTime);
        TextView programState = (TextView)convertView.findViewById(R.id.programState);
        ImageView programImage =(ImageView)convertView.findViewById(R.id.programImage);

        viewHolder = new ViewHolder();
        viewHolder.p_Name = programName;
        viewHolder.p_Time = programTime;
        viewHolder.p_State = programState;
        viewHolder.p_Image = programImage;

        convertView.setTag(viewHolder);

    }else{

        viewHolder = (ViewHolder) convertView.getTag();
    }
            viewHolder.p_Ad.setText(values.programIsimleri.get(position));
            viewHolder.p_Saat.setText(values.programSaatleri.get(position));
  Picasso.with(getApplicationContext()).load(values.programImageUrls.get(position)).into(viewHolder.p_Image);


    return convertView;
}

コードは現在正しく機能しています。

于 2014-10-16T16:51:51.247 に答える