簡體   English   中英

滾動時,ListView復制位圖圖像

[英]ListView is duplicating Bitmap image when scrolling

我正在做一個項目。 我能夠從SQLite數據庫中獲取所有要顯示的信息和圖片。 當我上下滾動時,運行分配給一個聯系人的圖像在滾動時會運行APP。 有人可以幫我嗎。

私有類MainCursorAdapter擴展了SimpleCursorAdapter {

    private class ViewHolder {
        Cursor cursor;
        TextView contact_fullname;
        String CONTACT_fullname;
        TextView contact_meetat;
        String CONTACT_meetat;
        TextView contact_phonenumber;
        String CONTACT_phonenumber;
        String CONTACT_status;
        Bitmap bmp;
        ImageView avatar_image;
        byte[] bb;
    }

    public MainCursorAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to, int flags) {
        super(context, layout, c, from, to, flags);

    }

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

        // get reference to the row
        View view = super.getView(position, convertView, parent);
        ViewHolder holder = new ViewHolder();
        // check for odd or even to set alternate colors to the row
        // background
        if (convertView == null) {
            holder.contact_fullname = (TextView) view
                    .findViewById(R.id.rowfirstname);
            holder.contact_meetat = (TextView) view
                    .findViewById(R.id.rowmeetat);
            holder.contact_phonenumber = (TextView) view
                    .findViewById(R.id.rowprimarynumber);
            holder.avatar_image = (ImageView) view
                    .findViewById(R.id.select_imgview);

            holder.cursor = (Cursor) getItem(position);
            holder.CONTACT_fullname = holder.cursor.getString(holder.cursor
                    .getColumnIndex(SQLiteAdapter.CONTACT_FULLNAME));
            holder.CONTACT_meetat = holder.cursor.getString(holder.cursor
                    .getColumnIndex(SQLiteAdapter.CONTACT_MEETAT));
            holder.CONTACT_phonenumber = holder.cursor
                    .getString(holder.cursor
                            .getColumnIndex(SQLiteAdapter.PHONE_NUMBER));
            holder.CONTACT_status = holder.cursor.getString(holder.cursor
                    .getColumnIndex(SQLiteAdapter.CONTACT_STATUS));
            holder.bb = holder.cursor.getBlob(holder.cursor
                    .getColumnIndex(SQLiteAdapter.CONTACT_AVATAR));

            if (holder.CONTACT_status.equals("Block")) {

                holder.contact_fullname.setTextColor(Color.WHITE);
                holder.contact_meetat.setTextColor(Color.WHITE);
                holder.contact_phonenumber.setTextColor(Color.WHITE);
                holder.contact_meetat
                        .setWidth(android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
                view.setBackgroundColor(Color.RED);

            } else if (holder.CONTACT_status.equals("Silent")) {

                holder.contact_fullname.setTextColor(Color.WHITE);
                holder.contact_meetat.setTextColor(Color.WHITE);
                holder.contact_phonenumber.setTextColor(Color.WHITE);
                holder.contact_meetat
                        .setWidth(android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
                view.setBackgroundColor(getResources().getColor(
                        R.color.pink));

            } else {

                holder.contact_fullname.setTextColor(Color.BLACK);
                holder.contact_meetat.setTextColor(Color.BLACK);
                holder.contact_phonenumber.setTextColor(Color.BLACK);
                holder.contact_meetat
                        .setWidth(android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
                view.setBackgroundColor(Color.WHITE);
            }

            try {
                if (holder.bb.equals(null) || holder.bb.equals("")) {
                    // no image to display
                    holder.avatar_image.setVisibility(View.GONE);
                    holder.avatar_image.setImageResource(R.drawable.addicon);
                } else {

                    holder.avatar_image.setVisibility(View.VISIBLE);
                    holder.bmp = BitmapFactory.decodeByteArray(holder.bb,
                            0, holder.bb.length);
                    holder.avatar_image.setImageBitmap(ImageAdapter
                            .getRoundedCornerBitmap(holder.bmp, 50));

                }

            } catch (Exception e) {

            }
            System.out.println("If: "+view.getTag());
            view.setTag(holder);

        } else {
            System.out.println("Else: " + view.getTag());
            holder = (ViewHolder) view.getTag();
        }


        return view;
    }
}

如本例所示 ,您的問題是,當convertview不為null時,您應該獲取標簽,然后賦值。

ViewHolder holder;
if(null == convertview){
     //inflate
     //create holder
     //all the find views
     convertview.setTag(holder);
} else{
     ViewHolder holder = convertview.getTag();
}
holder.something.method(value);

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM