package com.example.chitose.popupdemo.view;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.Toast;
import com.example.chitose.popupdemo.R;
import com.example.chitose.popupdemo.adapter.PopAdapter;
import com.example.chitose.popupdemo.entity.PopItem;
import com.example.chitose.popupdemo.utils.PopupUtils;
import java.util.ArrayList;
import java.util.List;
import static com.example.chitose.popupdemo.utils.StaticUtils.*;
/**
*
* 类型:PopupWindow的包装类
* 作用:包装了PopupWindow,转换数据类型进以加载进列表中
* Created by Chitose on 2018/4/30.
*/
public class PopupDownMenu {
private Context mContext;
//popupWindow可以在activity中被调用
public PopupWindow popupWindow;
//results[0]~results[2]都是用来存放点击结果,results[3]是作为“结果正常”的标识
public String[] results = new String[4];
//初始化两个存放PopItem的List
private List<List<PopItem>> popList = new ArrayList<>();
//初始化两个用来改变第二第三列数据的mList
private List<PopItem> mList = new ArrayList<>();
private List<PopItem> mList2 = new ArrayList<>();
//初始化三个ListView
private ListView firstListView;
private ListView secondListView;
private ListView thirdListView;
//初始化三个适配器
private PopAdapter firstAdapter;
private PopAdapter secondAdapter;
private PopAdapter thirdAdapter;
List<PopItem> itemList;
//仅一级时的下拉列表菜单栏
public PopupDownMenu(Context mContext, final List<PopItem> itemList, int width, int height, View view, Drawable drawable, ListView ... listViews) {
this.mContext = mContext;
this.itemList = itemList;
if (listViews.length==0) {
Toast.makeText(mContext, "数据不存在,请检查数据", Toast.LENGTH_SHORT).show();
return;
}
if(listViews.length>=1)
this.firstListView = listViews[0];
if(listViews.length>=2)
this.secondListView = listViews[1];
if(listViews.length>=3)
this.thirdListView = listViews[2];
//为popList中的数据初始化
PopupUtils.popListInit(popList, itemList);
//初始化状态(若第二列存在元素就显示→显示后若第三行有也同理显示)
try {
List<PopItem> temp1 = popList.get(popList.get(0).get(0).getId());
if (temp1 != null) {
mList.addAll(temp1);
List<PopItem> temp2 = popList.get(temp1.get(0).getId());
if (temp2 != null) {
mList2.addAll(temp2);
}
}
}catch (IndexOutOfBoundsException e){
e.printStackTrace();
}
//辨别菜单列表的类型是一级,二级还是三级
switch (PopupUtils.popSort(itemList)) {
case ONLY_ONE_POP:
initOnePop();
break;
case DOUBLE_POP:
initDoublePop();
break;
case TRIPLE_POP:
initTriplePop();
break;
default:
Log.d("ERROR:","大于三级的列表暂未开发,请检查数据");
break;
}
//初始化PopupWindow
popupWindow = new PopupWindow(view, width, height, true);
popupWindow.setFocusable(false);
popupWindow.setBackgroundDrawable(drawable);
}
/*一级菜单*/
private void initOnePop() {
//Listview与适配器的初始化
firstAdapter = new PopAdapter(mContext, popList.get(0));
firstListView.setAdapter(firstAdapter);
// 设置ListView点击事件监听
firstListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
firstAdapter.setSelectedPosition(position);
// 一级菜单的选择可以直接通过itemList设置结果放入result[0]中
// results[0] = popList.get(0).get(position).getContent();
results[0] = itemList.get(position).getContent();
results[3] = FINISHED_FLAG;
// 选择完后关闭popup窗口
popupWindow.dismiss();
}
});
}
/*二级菜单*/
private void initDoublePop() {
//适配器的初始化
firstAdapter = new PopAdapter(mContext, popList.get(0));
firstListView.setAdapter(firstAdapter);
secondAdapter = new PopAdapter(mContext, mList);
secondListView.setAdapter(secondAdapter);
firstListView.performItemClick(firstListView,0,firstListView.getItemIdAtPosition(0));
//点击事件
firstListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
firstAdapter.setSelectedPosition(position);
results[3] = null;
//选择了第一列元素相应的数据放到result[0]中
// results[0] = itemList.get(position).getContent();
results[0] = popList.get(0).get(position).getContent();
//尝试获取当前第一列选项的二级数据
List<PopItem> list2 = null;
try {
list2 = popList.get(popList.get(0).get(position).getId());
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
//如果没有二级数据,则直接跳转
if (list2 == null || list2.size() == 0) {
mList.clear();
results[1] = null; //防止缓存上一次选项带来异常
results[3] = FINISHED_FLAG;
popupWindow.dismiss();
}
//如果有则替换并notify
else {
mList.clear();
mList.addAll(list2);
secondAdapter.notifyDataSetChanged();
secondAdapter.setSelectedPosition(0);
}
}
});
secondListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//选了第二列元素后第一列选值必定指向已选第二列元素的父节点元素
// for(PopItem item : popList.get(0)){
// if(item.getId()==mList.get(position).getPid()) {
// results[0] = item.getContent();
// break;
// }
// }
results[0] = itemList.get(mList.get(position).getPid()-1).getContent();
secondAdapter.setSelectedPosition(position);
//选择了第二列元素相应的数据放到result[1]中
results[1] = mList.get(position).getContent();
results[3] = FINISHED_FLAG;
popupWindow.dismiss();
}
});
}
/*三级菜单*/
private void initTriplePop() {
//设置Adapter
firstAdapter = new PopAdapter(mContext, popList.get(0));
firstListView.setAdapter(firstAdapter);
没有合适的资源?快使用搜索试试~ 我知道了~
仿美团下拉筛选菜单——PopupDownMenu
共74个文件
xml:23个
java:16个
png:12个
需积分: 36 11 下载量 112 浏览量
2018-05-05
16:53:56
上传
评论
收藏 5.5MB ZIP 举报
温馨提示
用PopupWindow+ListView实现的仿美团、淘宝等下拉筛选菜单——PopupDownMenu
资源推荐
资源详情
资源评论
收起资源包目录
PopupDownMenu_ChitoseYono.zip (74个子文件)
PopupDemo
.gitignore 129B
PopupDemo_realfinal.zip 144KB
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 236B
build.gradle 637B
PopupDemo_final.zip 144KB
gradlew.bat 2KB
gradlew 5KB
PopupDemo__reallyfinal.zip 2.75MB
app
.gitignore 8B
build.gradle 962B
proguard-rules.pro 772B
libs
src
test
java
com
example
chitose
popupdemo
ExampleUnitTest.java 423B
main
AndroidManifest.xml 743B
java
com
example
chitose
popupdemo
utils
Data.java 3KB
PopupUtils.java 4KB
StaticUtils.java 602B
view
PopupDownMenu.java 13KB
adapter
PopAdapter.java 2KB
MainActivity.java 11KB
entity
PopItem.java 609B
res
values
styles.xml 394B
colors.xml 349B
strings.xml 75B
mipmap-xxhdpi
ic_launcher_round.png 10KB
ic_launcher.png 6KB
layout
popup_one_layout.xml 671B
activity_main.xml 2KB
popup_item.xml 524B
popup_triple_layout.xml 1KB
popup_double_layout.xml 1KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 276B
ic_launcher_round.xml 276B
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 4KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 3KB
drawable
ic_up.png 171B
tv_bg.xml 291B
item_selector.xml 201B
ic_launcher_background.xml 6KB
ic_down.png 171B
bg_filter_down.xml 254B
anim
fade_in_anim.xml 222B
fade_out_anim.xml 222B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 15KB
ic_launcher.png 9KB
androidTest
java
com
example
chitose
popupdemo
ExampleInstrumentedTest.java 785B
release
app-release.apk 1.46MB
output.json 201B
Popup_finalfianl.zip 800KB
PopupDemo_maybeFinish.zip 142KB
PopupDemo_fin.zip 142KB
gradle.properties 745B
PopupDemo.zip 136KB
popuplibrary
.gitignore 6B
build.gradle 956B
proguard-rules.pro 774B
libs
src
test
java
com
example
chitose
popuplibrary
ExampleUnitTest.java 422B
main
AndroidManifest.xml 57B
java
com
example
chitose
popuplibrary
utils
PopupUtils.java 3KB
StaticUtils.java 608B
view
PopupDownMenu.java 12KB
adapter
PopAdapter.java 2KB
entity
PopItem.java 614B
res
values
colors.xml 258B
strings.xml 80B
layout
popup_item.xml 522B
drawable
item_selector.xml 210B
androidTest
java
com
example
chitose
popuplibrary
ExampleInstrumentedTest.java 793B
settings.gradle 33B
共 74 条
- 1
资源评论
chitoseyono
- 粉丝: 168
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功