Android listview 滑动时不显示的项选择状态会还原的问题

这个问题主要是因为视图没有保存造成的。举例,原问题代码:

package com.zyf.filetrans.adapter;

import android.content.Context;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;

import com.zyf.filetrans.MyApp;
import com.zyf.filetrans.R;
import com.zyf.filetrans.Utils.FileUtils;
import com.zyf.filetrans.Utils.LogUtil;
import com.zyf.filetrans.core.entity.SendPackItem;
import com.zyf.filetrans.core.entity.SendPackage;
import com.zyf.filetrans.core.utils.SendPackageUtil;
import com.zyf.filetrans.ui.ChooseItemsActivity;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ItemInfoAdapter extends BaseAdapter {

    private static final String TAG=ItemInfoAdapter.class.getSimpleName();

    private Context mContext;
    private SendPackage mSendPack;
    private Handler mHandler;

    List<Map.Entry<String, SendPackItem>> mList;

    public ItemInfoAdapter(Context mContext) {
        this.mContext = mContext;

        mSendPack= MyApp.getAppContext().getmSendPackage();
        mList=new ArrayList<Map.Entry<String,SendPackItem>>(mSendPack.getSendList().entrySet());

    }

    public void setHandler(Handler handler){
        mHandler=handler;
    }

    @Override
    public int getCount() {
        return  mList.size();
    }

    @Override
    public Object getItem(int position) {
        return mList.get(position).getValue();
    }

    @Override
    public long getItemId(int position) {
        return position;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final SendPackItem sendPackItem = (SendPackItem) getItem(position);


        if (convertView == null) {
            convertView = View.inflate(mContext, R.layout.item_trans_choose, null);
            viewHolder = new ItemInfoAdapter.ItemsHolder();
            viewHolder.iv_shortcut = (ImageView) convertView.findViewById(R.id.iv_shortcut);
            viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
            viewHolder.tv_item_info = (TextView) convertView.findViewById(R.id.tv_item_info);
            viewHolder.tv_desc = (TextView) convertView.findViewById(R.id.tv_desc);
            viewHolder.iv_tick = (ImageView) convertView.findViewById(R.id.iv_tick);
            viewHolder.cb_choose = (CheckBox) convertView.findViewById(R.id.cb_choose);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ItemInfoAdapter.ItemsHolder) convertView.getTag();
        }

        if (sendPackItem != null) {
            viewHolder.iv_tick.setVisibility(View.GONE);

            if (sendPackItem.getType().equals(SendPackageUtil.TAG_PICTURE)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_jpg));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_jpeg_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_MUSIC)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_mp3));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_mp3_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_VIDEO)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_mp4));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_mp4_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_APK)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_apk_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_SYSTEM)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_system_data_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_SMS)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_sms_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_CONTACTS)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_contacts_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_CALL_LOG)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_calllog_desc));
            }else if (sendPackItem.getType().equals(SendPackageUtil.TAG_DOC)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_doc_desc));
            }else if (sendPackItem.getType().equals(SendPackageUtil.TAG_DOWNLOAD)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_download_desc));
            }else if (sendPackItem.getType().equals(SendPackageUtil.TAG_APK_DATA)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_apk_data_desc));
            }


            long total = sendPackItem.getTotalSize();
            int count = sendPackItem.getTotalItems();

            viewHolder.tv_item_info.setText(FileUtils.getFileSize(total) + " , " + count + "个");
            viewHolder.cb_choose.setChecked(sendPackItem.isBseleced());
            viewHolder.cb_choose.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    LogUtil.Logd(TAG, sendPackItem.getTotalItems() + " ," + sendPackItem.getTotalSize());
                    sendPackItem.setBseleced(isChecked);
                    if (mHandler != null) {
                        mHandler.obtainMessage(ChooseItemsActivity.MSG_UPDATE_ITEM_INFO, sendPackItem).sendToTarget();
                    }
                }
            });

        }

        return convertView;
    }

    static class ItemsHolder {
        ImageView iv_shortcut;
        TextView tv_name;
        TextView tv_desc;

        TextView tv_item_info;
        CheckBox cb_choose;
        ImageView iv_tick;
    }
}

 

用HashMap进行保存后,问题解决:

package com.zyf.filetrans.adapter;

import android.content.Context;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import com.zyf.filetrans.MyApp;
import com.zyf.filetrans.R;
import com.zyf.filetrans.Utils.FileUtils;
import com.zyf.filetrans.Utils.LogUtil;
import com.zyf.filetrans.core.entity.SendPackItem;
import com.zyf.filetrans.core.entity.SendPackage;
import com.zyf.filetrans.core.utils.SendPackageUtil;
import com.zyf.filetrans.ui.ChooseItemsActivity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ItemInfoAdapter extends BaseAdapter {

    private static final String TAG=ItemInfoAdapter.class.getSimpleName();

    private Context mContext;
    private SendPackage mSendPack;
    private Handler mHandler;
    private Map<Integer, View> mapView = new HashMap<Integer, View>();
    List<Map.Entry<String, SendPackItem>> mList;

    public ItemInfoAdapter(Context mContext) {
        this.mContext = mContext;
        mSendPack= MyApp.getAppContext().getmSendPackage();
        mList=new ArrayList<Map.Entry<String,SendPackItem>>(mSendPack.getSendList().entrySet());
    }

    public void setHandler(Handler handler){
        mHandler=handler;
    }

    @Override
    public int getCount() {
        return  mList.size();
    }

    @Override
    public Object getItem(int position) {
        return mList.get(position).getValue();
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final SendPackItem sendPackItem = (SendPackItem) getItem(position);
        ItemInfoAdapter.ItemsHolder viewHolder = null;

            if (!mapView.containsKey(position)) {
                convertView = View.inflate(mContext, R.layout.item_trans_choose, null);
                viewHolder = new ItemInfoAdapter.ItemsHolder();
                viewHolder.iv_shortcut = (ImageView) convertView.findViewById(R.id.iv_shortcut);
                viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
                viewHolder.tv_item_info = (TextView) convertView.findViewById(R.id.tv_item_info);
                viewHolder.tv_desc = (TextView) convertView.findViewById(R.id.tv_desc);
                viewHolder.iv_tick = (ImageView) convertView.findViewById(R.id.iv_tick);
                viewHolder.cb_choose = (CheckBox) convertView.findViewById(R.id.cb_choose);
                convertView.setTag(viewHolder);
                mapView.put(position, convertView);
            }else{
                convertView = mapView.get(position);
                viewHolder = (ItemInfoAdapter.ItemsHolder) convertView.getTag();
            }

        if (sendPackItem != null) {
            viewHolder.iv_tick.setVisibility(View.GONE);

            if (sendPackItem.getType().equals(SendPackageUtil.TAG_PICTURE)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_jpg));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_jpeg_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_MUSIC)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_mp3));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_mp3_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_VIDEO)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_mp4));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_mp4_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_APK)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_apk_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_SYSTEM)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_system_data_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_SMS)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_sms_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_CONTACTS)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_contacts_desc));
            } else if (sendPackItem.getType().equals(SendPackageUtil.TAG_CALL_LOG)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_calllog_desc));
            }else if (sendPackItem.getType().equals(SendPackageUtil.TAG_DOC)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_doc_desc));
            }else if (sendPackItem.getType().equals(SendPackageUtil.TAG_DOWNLOAD)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_download_desc));
            }else if (sendPackItem.getType().equals(SendPackageUtil.TAG_APK_DATA)) {
                viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_apk));
                viewHolder.tv_name.setText(mContext.getResources().getString(R.string.str_apk_data_desc));
            }

            long total = sendPackItem.getTotalSize();
            int count = sendPackItem.getTotalItems();

            viewHolder.cb_choose.setTag(position);


            viewHolder.tv_item_info.setText(FileUtils.getFileSize(total) + " , " + count + "个");
            viewHolder.cb_choose.setChecked(sendPackItem.isBseleced());
            viewHolder.cb_choose.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    LogUtil.Logd(TAG,"buttonView.getTag() : "+buttonView.getTag());
                    sendPackItem.setBseleced(isChecked);
                    if (mHandler != null) {
                        mHandler.obtainMessage(ChooseItemsActivity.MSG_UPDATE_ITEM_INFO, sendPackItem).sendToTarget();
                    }
                }
            });

        }

        return convertView;
    }

    static class ItemsHolder {
        ImageView iv_shortcut;
        TextView tv_name;
        TextView tv_desc;

        TextView tv_item_info;
        CheckBox cb_choose;
        ImageView iv_tick;
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值