android创建popwindow以及listview点击刷新状态

  1. popwindow的创建

    图示例子中是点击textView弹出popwindow。

             /**
     * 弹出popwindow
     *
     * @param tv
     */
    private void showPopWindow(final TextView tv) {
        int height = tv.getHeight();//得到控件的高度
        int width = tv.getWidth();//得到控件的宽度
        View contextView = LayoutInflater.from(activity).inflate(R.layout.item_home, null);
        mRecycleView = (ListView) contextView.findViewById(R.id.home_recycleview);
        mPopupWindow = new PopupWindow(contextView, width, ViewGroup.LayoutParams.WRAP_CONTENT);//构造
        mPopupWindow.setOutsideTouchable(true);//设置外部可点击
        mPopupWindow.setTouchable(true);
        mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
        mPopupWindow.setFocusable(true);        // 设置窗体可以获得焦点, 默认不可以获得焦点
        mPopupWindow.setFocusable(true);
        mPopupWindow.showAsDropDown(tv, 0, 0);//正下方弹出  这里好几种方式
        contextView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                dissPopWindows();
                return false;
            }
        });
        //加载适配器
        if (tv.getId() == R.id.tv_grade) {
            adapter = new MyRecycleAdapter(list1, activity);
            //年级
        } else {
            adapter = new MyRecycleAdapter(list2, activity);
        }
        mRecycleView.setAdapter(adapter);
        mRecycleView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                GradeBean gradeBean;
                if (tv.getId() == R.id.tv_grade) {
                    gradeBean = list1.get(position);
                    //年级
                    for (GradeBean bean : list1
                            ) {
                        bean.setSelected(false);
                    }
                } else {
                    gradeBean = list2.get(position);
                    for (GradeBean bean : list2
                            ) {
                        bean.setSelected(false);
                    }
                }
                gradeBean.setSelected(true);
                tv.setText(gradeBean.getName());
                dissPopWindows();
            }
        });
    }
    
  1. listview或者recycleview更改状态
  • bean对象

            public class GradeBean {
        private String name;
        private int gradeId;
        private boolean isSelected;
    
        public GradeBean() {
        }
    
        public GradeBean(String name, int gradeId) {
            this.name = name;
            this.gradeId = gradeId;
        }
    
        public GradeBean(String name, int gradeId, boolean isSelected) {
            this.name = name;
            this.gradeId = gradeId;
            this.isSelected = isSelected;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getGradeId() {
            return gradeId;
        }
    
        public void setGradeId(int gradeId) {
            this.gradeId = gradeId;
        }
    
        public boolean isSelected() {
            return isSelected;
        }
    
        public void setSelected(boolean selected) {
            isSelected = selected;
        }
    }
    
  • Adapter
        public class MyRecycleAdapter extends BaseAdapter {
    private List<GradeBean> list;
    private Context context;
    LayoutInflater inflater;
    private String name;


    public MyRecycleAdapter(List<GradeBean> list, Context context) {
        this.list = list;
        this.context = context;
        inflater = LayoutInflater.from(context);
    }


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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_home_adapter, null);
            holder = new ViewHolder();
            holder.iv = (ImageView) convertView.findViewById(R.id.item_iv);
            holder.tv = (TextView) convertView.findViewById(R.id.item_tv);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        GradeBean gradeBean = list.get(position);
        if (gradeBean.isSelected()) {
            holder.iv.setVisibility(View.VISIBLE);
        } else {
            holder.iv.setVisibility(View.INVISIBLE);
        }
        holder.tv.setText(gradeBean.getName());
        return convertView;
    }


    private class ViewHolder {
        TextView tv;
        ImageView iv;
    }

}

主要就是getView中的判断

  • 条目点击事件

           mRecycleView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            GradeBean gradeBean;
            if (tv.getId() == R.id.tv_grade) {
                gradeBean = list1.get(position);
                //年级
                for (GradeBean bean : list1
                        ) {
                    bean.setSelected(false);
                }
            } else {
                gradeBean = list2.get(position);
                for (GradeBean bean : list2
                        ) {
                    bean.setSelected(false);
                }
            }
            gradeBean.setSelected(true);
            tv.setText(gradeBean.getName());
            dissPopWindows();
        }
    });