说一说ListView(二)

今天,我们来总结下ListView的选择,包括单选和多选。

一、单选:

第一步:在DemoActivity中声明并初始化一个变量。如下:

public int selectedPosition = -1;

第二步:在我们自定义的BaseAdapter的getView方法中,做如下处理:

if(position == ((DemoActivity)context).selectedPosition) {
   holder.iv_select.setImageResource(R.mipmap.selected);
} else {
   holder.iv_select.setImageResource(R.mipmap.un_selected);
}

第三步:在DemoActivity中,做如下处理:

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                selectedPosition = position;
                storeAdapter.notifyDataSetChanged();
                //业务逻辑操作
            }
        });

二、多选:

实现多选,我们是在自定义的BaseAdapter中完成的。这里先直接上代码,然后我们再结合代码分析。

public class UserAdapter extends BaseAdapter{
    private Context context;
    private List<User> userList;
    private Map<Integer, Integer> selected;

    public UserAdapter(Context context, List<User> userList) {
        this.context = context;
        this.userList = userList;
        selected = new HashMap<Integer, Integer>();
    }

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

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

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

    @Override
    public View getView(final int position, View convertView, ViewGroup viewGroup) {
        final ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.item_user, null);
            holder = new ViewHolder();
            holder.iv_select= (ImageView) convertView.findViewById(R.id.iv_select);
            holder.relativeLayout = (RelativeLayout) convertView.findViewById(R.id.relative);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        if (selected.containsKey(position)) {
            holder.iv_select.setImageResource(R.mipmap.selected);
            holder.relativeLayout.setTag(false);
        } else {
            holder.iv_select.setImageResource(R.mipmap.un_selected);
            holder.relativeLayout.setTag(true);
        }
        holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if ((boolean)holder.relativeLayout.getTag()) {
                    if (!selected.containsKey(position)) {
                        selected.put(position, position);
                    }
                    holder.iv_select.setImageResource(R.mipmap.selected);
                    holder.relativeLayout.setTag(false);
                    //业务逻辑处理
                } else {
                    selected.remove(position);
                    holder.iv_select.setImageResource(R.mipmap.un_selected);
                    holder.relativeLayout.setTag(true);
                    //业务逻辑处理
                }
            }
        });
        return convertView;
    }

    public class ViewHolder {
        ImageView iv_select;
        RelativeLayout relativeLayout;
    }
}

注:这里只是要介绍如何实现ListView的多选,因此将其他业务方面的代码都剥离出去了。

好,我们现在来分析:

第一步:我们声明一个Map,然后在自定义的BaseAdapter的构造方法中实例化这个Map,我们用的是HashMap。

第二步:在getView方法中,通过如下代码进行初始化:

        if (selected.containsKey(position)) {
            holder.iv_select.setImageResource(R.mipmap.selected);
            holder.relativeLayout.setTag(false);
        } else {
            holder.iv_select.setImageResource(R.mipmap.un_selected);
            holder.relativeLayout.setTag(true);
        }

第三步:通过如下代码进行我们的业务逻辑处理:

        holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if ((boolean)holder.relativeLayout.getTag()) {
                    if (!selected.containsKey(position)) {
                        selected.put(position, position);
                    }
                    holder.iv_select.setImageResource(R.mipmap.selected);
                    holder.relativeLayout.setTag(false);
                    //业务逻辑处理
                } else {
                    selected.remove(position);
                    holder.iv_select.setImageResource(R.mipmap.un_selected);
                    holder.relativeLayout.setTag(true);
                    //业务逻辑处理
                }
            }
        });

猜你喜欢

转载自blog.csdn.net/zdj_Develop/article/details/81324855