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(); } }); }
- 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(); } });