最近乍一想,想做个简单的筛选效果,如下就是效果图
筛选两个字没显示完全,可能是模拟器问题 ,我在自己的机子上运行了不是这样。
MainActivity布局就一个按钮没啥说的。
贴上MainActivity的代码。部分代码写上了注释:
public class MainActivity extends AppCompatActivity {
// 声明PopupWindow对象的引用
private PopupWindow popupWindow;
//分类的gridview
private GridView gridView1;
//产地的gridview
private GridView gridView2;
//popupWindow的布局view
private View popupWindow_view;
private List<Classify> classifyList;
private List<Classify> producingList;
private GridviewAdapter mydapter;
private GridviewAdapter mydapter2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//向分类集合中 添加假数据
classifyList = new ArrayList<>();
classifyList.add(new Classify("全部"));
classifyList.add(new Classify("分类A"));
classifyList.add(new Classify("分类B"));
classifyList.add(new Classify("分类C"));
classifyList.add(new Classify("分类D"));
//向产地集合中 添加假数据
producingList = new ArrayList<>();
producingList.add(new Classify("全部"));
producingList.add(new Classify("产地A"));
producingList.add(new Classify("产地B"));
producingList.add(new Classify("产地C"));
producingList.add(new Classify("产地D"));
producingList.add(new Classify("产地E"));
producingList.add(new Classify("产地F"));
producingList.add(new Classify("产地G"));
producingList.add(new Classify("产地H"));
}
/**
* 点击筛选弹出菜单
*
* @param view
*/
public void click(View view) {
//创建popupwindow
getPopupWindow();
// 这里是位置显示方式,在屏幕的右侧
popupWindow.showAtLocation(view, Gravity.RIGHT, 0, 0);
}
//在这获取popupwindow的实例
private void getPopupWindow() {
if (null != popupWindow) {
popupWindow.dismiss();
return;
} else {
initPopuptWindow();
}
}
/**
* 创建 PopuptWindow的实例
*/
public void initPopuptWindow() {
popupWindow_view = View.inflate(this, R.layout.popupwindow_right, null);
// 创建PopupWindow实例,LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT分别是宽度和高度
popupWindow = new PopupWindow(popupWindow_view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT, true);
// 设置动画效果
popupWindow.setAnimationStyle(R.style.AnimationFade);
gridView1 = (GridView) popupWindow_view.findViewById(R.id.gridview1);
gridView2 = (GridView) popupWindow_view.findViewById(R.id.gridview2);
Button btnOk = (Button) popupWindow_view.findViewById(R.id.btn_ok);
Button btnCancal = (Button) popupWindow_view.findViewById(R.id.btn_cancal);
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = "";
String str2 = "";
//取出选中的属性
for (int i = 0; i < classifyList.size(); i++) {
if (classifyList.get(i).isChecked()) {
str = classifyList.get(i).getStr();
}
}
//取出选中的属性
for (int i = 0; i < producingList.size(); i++) {
if (producingList.get(i).isChecked()) {
str2 = producingList.get(i).getStr();
}
}
Toast.makeText(MainActivity.this, str + str2, Toast.LENGTH_SHORT).show();
//关闭popupWindow
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
popupWindow = null;
}
}
});
btnCancal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < classifyList.size(); i++) {
classifyList.get(i).setChecked(false);
}
for (int i = 0; i < producingList.size(); i++) {
producingList.get(i).setChecked(false);
}
mydapter.getSaveList().clear();
mydapter.notifyDataSetChanged();
mydapter2.notifyDataSetChanged();
}
});
mydapter = new GridviewAdapter(classifyList, MainActivity.this);
gridView1.setAdapter(mydapter);
gridView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//如果选中就设置非选中。非选中就设置选中
classifyList.get(position).setChecked(!classifyList.get(position).isChecked());
//只有一条目选中
for (int i = 0; i < classifyList.size(); i++) {
if (i == position) {
continue;
}
classifyList.get(i).setChecked(false);
}
mydapter.notifyDataSetChanged();
}
});
mydapter2 = new GridviewAdapter(producingList, MainActivity.this);
gridView2.setAdapter(mydapter2);
gridView2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//如果选中就设置非选中。非选中就设置选中
producingList.get(position).setChecked(!producingList.get(position).isChecked());
//只有一条目选中
for (int i = 0; i < producingList.size(); i++) {
if (i == position) {
continue;
}
producingList.get(i).setChecked(false);
}
mydapter2.notifyDataSetChanged();
}
});
//对popupWindows进行触摸监听
popupWindow_view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
boolean b = inRangeOfView(popupWindow_view, event);
if (b) {
return true;
} else
return false;
}
});
}
/**
* 用于判断点击范围是否在弹出框内,点击外面就收起popupWindows
*/
private boolean inRangeOfView(View view, MotionEvent ev) {
int[] location = new int[2];
view.getLocationOnScreen(location);
int x = location[0];
int y = location[1];
if (ev.getX() < x || ev.getX() > (x + view.getWidth()) || ev.getY() < y || ev.getY() > (y + view.getHeight())) {
if (popupWindow != null && popupWindow.isShowing()) {