Android PopuWindow 导航链级筛选

效果图:

代码

PopuWindowWidget

package com.example.checklistview;

import android.annotation.SuppressLint;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.PopupWindow;

@SuppressLint("ViewConstructor")
public class PopuWindowWidget{

	private static PopuWindowWidget popuWindow=null;
	private Context context;
	public PopuWindowWidget(Context context){
		this.context=context;
	}

	public static PopuWindowWidget getInstance(Context context){
		if(popuWindow==null){
			popuWindow=new PopuWindowWidget(context);
		}
		return popuWindow;
	}

	public void onCreatePopuWindow(View view,PopuWindowListener listener){
		PopupWindow pop=new PopupWindow(view,LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
		pop.setOutsideTouchable(false);
		pop.setFocusable(false);
		pop.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.background_trans));
		listener.initialization(pop);
	}

}
package com.example.checklistview;

import android.widget.PopupWindow;

public interface PopuWindowListener{
	void isShow(boolean isShow,String message);
	void initialization(PopupWindow popuWindow);
	void onClickItem(Object obj);
}

PopuWindowView:

package com.example.checklistview;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.checklistview.CheckAdapter.NameOnClickListener;

public class PopuWindowView implements NameOnClickListener{
	private static PopuWindowListener listener;
	private View view;
	private Activity activity;
	private TextView tv;
	private ListView listView_bar;
	private ListView listView_data;
	private ArrayList<CheckBean> data=null;
	private ArrayList<CheckBean> bar=null;
	private HashMap<Integer, ArrayList<CheckBean>> map=new HashMap<Integer, ArrayList<CheckBean>>();
	private HashMap<String,String> checkString=new HashMap<String,String>();

	private CheckAdapter adapter_bar;
	private DataCheckAdapter adapter_data;
	private ViewHolder vhs;
	private TextView check_value;
	private Button sure;
	public static PopuWindowView getInstance(Activity activity,PopuWindowListener popuWindowListener,int layout){
		listener=popuWindowListener;
		return new PopuWindowView(activity, layout);
	}
	public PopuWindowView(Activity activity,int layout){
		this.view=activity.getLayoutInflater().inflate(layout, null);
		this.activity=activity;
		initialization();
	}

	private void initialization() {
		// TODO Auto-generated method stub
		check_value=(TextView)view.findViewById(R.id.TextView_check_value);
		sure=(Button)view.findViewById(R.id.sure);
		listView_bar=(ListView)view.findViewById(R.id.action_bar);
		listView_data=(ListView)view.findViewById(R.id.listview_data);
		initData();
		adapter_bar=new CheckAdapter(activity, bar,this);
		adapter_data=new DataCheckAdapter(activity, map.get(0),this);
		listView_bar.setAdapter(adapter_bar);
		listView_data.setAdapter(adapter_data);
		sure.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				listener.isShow(false, checkString.toString());
			}
		});

	}
	private void initData() {
		// TODO Auto-generated method stub
		bar=new ArrayList<CheckBean>();
		CheckBean cb0=new CheckBean(0,"发布时间",true);
		CheckBean cb1=new CheckBean(1,"期望月薪",false);
		CheckBean cb2=new CheckBean(2,"工作经验",false);

		bar.add(cb0);
		bar.add(cb1);
		bar.add(cb2);

		data=new ArrayList<CheckBean>();
		CheckBean dcb0=new CheckBean(0,"所有",false);
		CheckBean dcb1=new CheckBean(1,"今天",false);
		CheckBean dcb2=new CheckBean(2,"最近三天",false);
		CheckBean dcb3=new CheckBean(3,"最近一周",false);
		CheckBean dcb4=new CheckBean(4,"最近一个月",false);
		data.add(dcb0);
		data.add(dcb1);
		data.add(dcb2);
		data.add(dcb3);
		data.add(dcb4);
		map.put(0, data);

		data=new ArrayList<CheckBean>();
		CheckBean dcb01=new CheckBean(0,"面议",false);
		CheckBean dcb11=new CheckBean(1,"3000元以下",false);
		CheckBean dcb21=new CheckBean(2,"3000-5000元",false);
		CheckBean dcb31=new CheckBean(3,"5000-8000元",false);
		CheckBean dcb41=new CheckBean(4,"8000-10000元",false);
		CheckBean dcb51=new CheckBean(5,"10000元以上",false);
		data.add(dcb01);
		data.add(dcb11);
		data.add(dcb21);
		data.add(dcb31);
		data.add(dcb41);
		data.add(dcb51);
		map.put(1, data);

		data=new ArrayList<CheckBean>();
		CheckBean dcb02=new CheckBean(0,"不限",false);
		CheckBean dcb12=new CheckBean(1,"无工作经验",false);
		CheckBean dcb22=new CheckBean(2,"1年以下",false);
		CheckBean dcb32=new CheckBean(3,"1-3年工作经验",false);
		CheckBean dcb42=new CheckBean(4,"3-5年工作经验",false);
		CheckBean dcb52=new CheckBean(5,"5-10年工作经验",false);
		CheckBean dcb62=new CheckBean(6,"10年以上工作经验",false);
		data.add(dcb02);
		data.add(dcb12);
		data.add(dcb22);
		data.add(dcb32);
		data.add(dcb42);
		data.add(dcb52);
		data.add(dcb62);
		map.put(2, data);

		data=new ArrayList<CheckBean>();
		CheckBean dcb03=new CheckBean(0,"全部",false);
		CheckBean dcb13=new CheckBean(1,"全职",false);
		CheckBean dcb23=new CheckBean(2,"兼职",false);
		CheckBean dcb33=new CheckBean(3,"实习",false);
		data.add(dcb03);
		data.add(dcb13);
		data.add(dcb23);
		data.add(dcb33);
		map.put(3, data);

	}
	public View getView(){
		return view;
	}
	@Override
	public void callbackPosition(int type,int position) {
		// TODO Auto-generated method stub
		if(type==1){
			for (int i = 0; i < adapter_bar.getList().size(); i++) {
				if(adapter_bar.getList().get(i).getId()==position){
					adapter_bar.getList().get(i).setCheck(true);
				}else{
					adapter_bar.getList().get(i).setCheck(false);
				}
			}
			adapter_data.setList(map.get(position));
			adapter_bar.notifyDataSetChanged();
			adapter_data.notifyDataSetChanged();
			listView_data.post(new Runnable() {

				@Override
				public void run() {
					// TODO Auto-generated method stub
					for (int i = 0; i < adapter_data.getList().size(); i++) {
						if(adapter_data.getList().get(i).isCheck()){
							listView_data.setSelectionFromTop(i, 0);
							return;
						}
					}
					listView_data.setSelectionFromTop(0, 0);
				}
			});
		}else if(type==2){
			int index=-1;
			for (int i = 0; i < adapter_data.getList().size(); i++) {
				if(adapter_data.getList().get(i).getId()==position){
					Toast.makeText(activity, ":"+i, 100).show();
					adapter_data.getList().get(i).setCheck(true);
					index=i;
				}else{
					adapter_data.getList().get(i).setCheck(false);
				}
			}

			adapter_data.notifyDataSetChanged();
			//
			int indexStart=-1;
			for (int i = 0; i < adapter_bar.getList().size(); i++) {
				if(adapter_bar.getList().get(i).isCheck()){
					indexStart=i;
					for (int j = 0; j < map.get(i).size(); j++) {
						if(j==index){
							map.get(i).get(index).setCheck(true);
						}else{
							map.get(i).get(j).setCheck(false);
						}
					}
				}
			}

			for (int i = 0; i < map.size(); i++) {
				for (int j = 0; j < map.get(i).size(); j++) {
					if(map.get(i).get(j).isCheck()){
						checkString.put(adapter_bar.getList().get(i).getName(), map.get(i).get(j).getName());
					}
				}
			}

			check_value.setText("您当前选中:"+checkString.toString());

		}

	}
}

资源下载地址:http://download.csdn.net/detail/anddroid_lanyan/8229077

时间: 2024-10-22 02:18:22

Android PopuWindow 导航链级筛选的相关文章

Android开发实践:Android交叉编译工具链的使用

前面2篇文章分别介绍了Android NDK编译的命令行参数,以及如何在任意目录使用Android.mk来编译本地c/c++代码,Andriod.mk和ndk-build只不过是Android官方提供了一套封装过的Android交叉编译环境而已,其实,你可以不用它,而直接通过传统的Makefile文件来编译你的c/c++代码的,本文即介绍如何直接通过传统的Makefile文件来编译可用于Android平台的库文件. 经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86

Android车载导航的一些困境

车载导航从最初的用解码芯片,过渡到用WinCE系统,已经形成了一个较大的产业.车载导航使用上的一些大原则,基本上被固定了下来.现在WinCE走到了尽头,Android车载导航开始发力,但因为Android系统的使用习惯,与传统车载的使用习惯有着较大的不同,在设计的时候,往往会遇到一些尴尬,既要保持原有的使用习惯,又要保留Android的优点.都要兼顾的话往往是技术上要费很大功夫而且带来使用上的困惑,但是市场的惯性又很难允许全面的革新.所以Android车载,我认为最大的困难并不是技术上的,而是产

Entity Framework 6如何进行导航属性的筛选(context.Msg.First(t=&gt;t.Id==1).Include(t=&gt;t.MsgDetail),筛选MsgDetail带条件)

问题: https://q.cnblogs.com/q/98333/ Msg表(Id,Content,IsDel).内有 virtual ICollection<MsgDetail> MsgDetails属性 MsgDetail表(Id,MsgId,SubContent,IsDel) 两者是一对多关系. 如何进行如下意思的的筛选? 若写这句伪代码: context.Msg.First(t=>t.Id==1).Include(t=>t.MsgDetail.Where(t=>t.

android更换工具链

欢迎转载opendevkit文章, 文章原始地址: http://www.opendevkit.com/?e=73 android编译系统是跟随android源码一起发布的,使用了gcc编译器,也就是所谓的交叉编译环境.android-4.2里用的编译器是gcc4.6,本篇升级gcc4.6到gcc4.6,修改并不复杂.当然,涉及到一些语法上的修改. android更换工具链

android 底部导航总结

实现android 底部导航的方式有好几种如:fragment:.TabActivity.ViewGroup.viewPager等, 这里介绍使用viewPager实现底部导航. 先说说使用viewPager实现的原因 1.fragment a  我们需要使用fragment的话,我们只能用v4包里面的fragment,因为我们需要向下兼容. b  当我们用V4包里面的fragment的时候,系统会自动添加一个节点. c  fragment不允许嵌套fragmentd  这个谷歌是在4.2里面才

Android ActionBar返回父级Activity

当子级Activity继承ActionBarActivity类之后 当运行在 Android 4.1(API level 16) 或更高版本,或者使用 Support 库中的 ActionBarActivity 时,实现向上导航需要在 manifest 文件中声明父 activity ,同时在 action bar 中设置向上按钮可用. 子级Activity声明 <activity android:name="{子级包名}" android:parentActivityName=

Android 滑动导航菜单的快速构建(二) Material Design

原创文章,转载请注明 ( 来自:http://blog.csdn.net/leejizhou/article/details/52046748 李济洲的博客 ) 上一篇 http://blog.csdn.net/leejizhou/article/details/52013343 介绍了几个滑动导航菜单效果的快速构建,这篇文章来总结"当下"如何按照Android的设计标准去设计滑动导航菜单,我为什么说的"当下"呢?因为这个设计标准是会变的. 在material de

Android底部导航BottomNavigationBar

项目地址: https://github.com/Ashok-Varma/BottomNavigation 参考 1.http://www.jianshu.com/p/0550500f8f56 2.http://blog.csdn.net/qq_16131393/article/details/51419901 1.样式 底部导航的action通常是3-5个,小于3个推荐使用tab,大于三个推荐使用navigation drawer 在切换的时候,使用cross-fade动画,避免视图间的横向移

Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager

action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个layout 什么layout都可以 加个Id 叫container package com.example.demoforactionbar; import android.app.ActionBar; import android.app.Activity; import android.app.