在listView中如何弹出一个popWindow

@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.app_manager);

		lv_app_manager = (ListView) findViewById(R.id.lv_app_manager);
		ll_app_manager_progress = (LinearLayout) findViewById(R.id.ll_app_manager_progress);
		ll_app_manager_progress.setVisibility(View.VISIBLE);

		tv_app_title = (TextView) findViewById(R.id.tv_app_title);
		tv_app_title.setOnClickListener(this);

		initUI(false);

		lv_app_manager.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				dismissPopupWindow();
				//用来存放当前的item的坐标值,第一个是x的坐标,第二个是y的坐标
				int[] location = new int[2];
				//把当前的item的坐标放到int数组里面
				view.getLocationInWindow(location);

				View popupView = View.inflate(AppManagerActivity.this,R.layout.popup_item,null);
				LinearLayout ll_app_unistall = (LinearLayout) popupView.findViewById(R.id.ll_app_uninstall);
				LinearLayout ll_app_run = (LinearLayout) popupView.findViewById(R.id.ll_app_start);
				LinearLayout ll_app_share = (LinearLayout) popupView.findViewById(R.id.ll_app_share);
				ll_app_unistall.setOnClickListener(AppManagerActivity.this);
				ll_app_run.setOnClickListener(AppManagerActivity.this);
				ll_app_share.setOnClickListener(AppManagerActivity.this);

				//拿到当时点击的条目,并设置到view里面
				AppInfo info = (AppInfo) lv_app_manager.getItemAtPosition(position);
				ll_app_unistall.setTag(info);
				ll_app_run.setTag(info);
				ll_app_share.setTag(info);

				//添加动画
				LinearLayout ll_app_popup = (LinearLayout) popupView.findViewById(R.id.ll_app_popup);
				ScaleAnimation scaleAnimation = new ScaleAnimation(0.0f, 1.0f,0.0f,1.0f);
				scaleAnimation.setDuration(300);

				//new 一个PopupWindow出来
				popupWindow = new PopupWindow(popupView,230,70);
				//一定要给popupWindow设置一个背景图片,不然的话,会有很多未知的问题的
				//如没办法给它加上动画,还有显示会有问题等。
				//如果我们没有要设置的图片,那么我们就给它加上一个透明的背景图片
				Drawable drawable = new ColorDrawable(Color.TRANSPARENT);
				popupWindow.setBackgroundDrawable(drawable);

				int x = location[0] + 60;
				int y = location[1];
				//把popupWindow显示出来
				popupWindow.showAtLocation(view, Gravity.LEFT|Gravity.TOP, x, y);

				//开启动画
				ll_app_popup.startAnimation(scaleAnimation);
			}
		});

		//当listView滚动的时候调用方法
		lv_app_manager.setOnScrollListener(new OnScrollListener() {

			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
				// TODO Auto-generated method stub
				dismissPopupWindow();
			}

			@Override
			public void onScroll(AbsListView view, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {
				// TODO Auto-generated method stub
				dismissPopupWindow();
			}
		});
	}

	//判断PopupWindow是不是存在,存在就把它dismiss掉
	private void dismissPopupWindow() {
		if(popupWindow != null){
			popupWindow.dismiss();
			popupWindow = null;
		}

	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		super.onActivityResult(requestCode, resultCode, data);
		if("用户应用".equals(tv_app_title.getText().toString().trim()))
		{
			initUI(true);
			adapter.setAppInfos(getUserApp());
			//通知ListView数据发生了变化
			adapter.notifyDataSetChanged();
		}
		else
		{
			initUI(false);
		}
	}

	@Override
	protected void onDestroy()
	{
		dismissPopupWindow();
		super.onDestroy();
	}
运行效果:<img src="http://img.blog.csdn.net/20150121222619613?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenFzNjI3NjExMzA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
————————————————————————————————————————————————————————————————————
2.setTag(),getTag()的在popupWindow
(1)View视图设置Tag(),方便以后获取
<pre name="code" class="java">lv_app_manager.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				dismissPopupWindow();
				//用来存放当前的item的坐标值,第一个是x的坐标,第二个是y的坐标
				int[] location = new int[2];
				//把当前的item的坐标放到int数组里面
				view.getLocationInWindow(location);

				View popupView = View.inflate(AppManagerActivity.this,R.layout.popup_item,null);
				LinearLayout ll_app_unistall = (LinearLayout) popupView.findViewById(R.id.ll_app_uninstall);
				LinearLayout ll_app_run = (LinearLayout) popupView.findViewById(R.id.ll_app_start);
				LinearLayout ll_app_share = (LinearLayout) popupView.findViewById(R.id.ll_app_share);
				ll_app_unistall.setOnClickListener(AppManagerActivity.this);
				ll_app_run.setOnClickListener(AppManagerActivity.this);
				ll_app_share.setOnClickListener(AppManagerActivity.this);

				//拿到当时点击的条目,并设置到view里面
				AppInfo info = (AppInfo) lv_app_manager.getItemAtPosition(position);
				ll_app_unistall.setTag(info);
				ll_app_run.setTag(info);
				ll_app_share.setTag(info);

(2)View视图获得Tag()中的内容


@Override
<span style="white-space:pre">	</span>public void onClick(View v)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>//加载过程中的时候,不能点击
<span style="white-space:pre">		</span>if(!flag)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>return;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>AppInfo item = (AppInfo) v.getTag();
<span style="white-space:pre">		</span>switch(v.getId())
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>//当我们点击那个标题栏之后,我们就只把用户的应用列出来
<span style="white-space:pre">			</span>case R.id.tv_app_title : 
<span style="white-space:pre">				</span>if("所有应用".equals(tv_app_title.getText().toString().trim()))
<span style="white-space:pre">				</span>{
<span style="white-space:pre">					</span>tv_app_title.setText("用户应用");
<span style="white-space:pre">					</span>adapter.setAppInfos(getUserApp());
<span style="white-space:pre">					</span>//通知ListView数据发生了变化
<span style="white-space:pre">					</span>adapter.notifyDataSetChanged();
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>else
<span style="white-space:pre">				</span>{
<span style="white-space:pre">					</span>tv_app_title.setText("所有应用");
<span style="white-space:pre">					</span>adapter.setAppInfos(list);
<span style="white-space:pre">					</span>adapter.notifyDataSetChanged();
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>break;
<span style="white-space:pre">				</span>
<span style="white-space:pre">			</span>case R.id.ll_app_uninstall : 
<span style="white-space:pre">				</span>if(item.isSystemApp())
<span style="white-space:pre">				</span>{
<span style="white-space:pre">					</span>Toast.makeText(AppManagerActivity.this, "不能卸载系统的应用程序", Toast.LENGTH_SHORT).show();
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>else
<span style="white-space:pre">				</span>{
<span style="white-space:pre">					</span>String strUri = "package:" + item.getPackageName();
<span style="white-space:pre">					</span>Uri uri = Uri.parse(strUri);
<span style="white-space:pre">					</span>Intent deleteIntent = new Intent();
<span style="white-space:pre">					</span>deleteIntent.setAction(Intent.ACTION_DELETE);
<span style="white-space:pre">					</span>deleteIntent.setData(uri);
<span style="white-space:pre">					</span>startActivityForResult(deleteIntent, 0);
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>break;
<span style="white-space:pre">				</span>
<span style="white-space:pre">			</span>case R.id.ll_app_start : 
<span style="white-space:pre">				</span>try
<span style="white-space:pre">				</span>{
<span style="white-space:pre">					</span>//拿到这个包对应的PackageInfo对象,这里我们指定了两个flag,
<span style="white-space:pre">					</span>//一个就是之前讲过的,所有的安装过的应用程序都找出来,包括卸载了但没清除数据的
<span style="white-space:pre">					</span>//一个就是指定它去扫描这个应用的AndroidMainfest文件时候的activity节点,
<span style="white-space:pre">					</span>//这样我们才能拿到具有启动意义的ActivityInfo,如果不指定,是无法扫描出来的
<span style="white-space:pre">					</span>PackageInfo packageInfo = getPackageManager().getPackageInfo(item.getPackageName(), PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_ACTIVITIES);
<span style="white-space:pre">					</span>//扫描出来的所以activity节点的信息
<span style="white-space:pre">					</span>ActivityInfo[] activityInfos = packageInfo.activities;
<span style="white-space:pre">					</span>//有些应用是无法启动的,所以我们就要判断一下
<span style="white-space:pre">					</span>if(activityInfos != null && activityInfos.length > 0)
<span style="white-space:pre">					</span>{
<span style="white-space:pre">						</span>//在扫描出来的应用里面,第一个是具有启动意义的
<span style="white-space:pre">						</span>ActivityInfo startActivity = activityInfos[0];
<span style="white-space:pre">						</span>//设置好Intent,启动activity
<span style="white-space:pre">						</span>Intent intent = new Intent();
<span style="white-space:pre">						</span>intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
<span style="white-space:pre">						</span>intent.setClassName(item.getPackageName(), startActivity.name);
<span style="white-space:pre">						</span>startActivity(intent);
<span style="white-space:pre">					</span>}
<span style="white-space:pre">					</span>else
<span style="white-space:pre">					</span>{
<span style="white-space:pre">						</span>Toast.makeText(AppManagerActivity.this, "这个应用程序无法启动", Toast.LENGTH_SHORT).show();
<span style="white-space:pre">					</span>}
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>catch (NameNotFoundException e)
<span style="white-space:pre">				</span>{
<span style="white-space:pre">					</span>e.printStackTrace();
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>break;
<span style="white-space:pre">				</span>
<span style="white-space:pre">			</span>case R.id.ll_app_share : 
<span style="white-space:pre">				</span>Intent shareIntent = new Intent();
<span style="white-space:pre">				</span>//设置Intent的action
<span style="white-space:pre">				</span>shareIntent.setAction(Intent.ACTION_SEND);
<span style="white-space:pre">				</span>//设定分享的类型是纯文本的
<span style="white-space:pre">				</span>shareIntent.setType("text/plain");
<span style="white-space:pre">				</span>//设置分享主题
<span style="white-space:pre">				</span>shareIntent.putExtra(Intent.EXTRA_SUBJECT, "分享");
<span style="white-space:pre">				</span>//设置分享的文本
<span style="white-space:pre">				</span>shareIntent.putExtra(Intent.EXTRA_TEXT, "有一个很好的应用程序哦!" + item.getAppName());
<span style="white-space:pre">				</span>//shareIntent = Intent.createChooser(shareIntent, "分享");
<span style="white-space:pre">				</span>startActivity(shareIntent);
<span style="white-space:pre">				</span>break;
<span style="white-space:pre">				</span>
<span style="white-space:pre">			</span>default : 
<span style="white-space:pre">				</span>break;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>dismissPopupWindow();
<span style="white-space:pre">	</span>}
				
时间: 2024-10-05 15:09:01

在listView中如何弹出一个popWindow的相关文章

点击事件中实现弹出一个选择框(如选择网络设置、选择电话短信联系方式)

1.网络设置 public void checkNetwork(){ //获取连接的管理对象 ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); //获取当前正在使用的网络 NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); //判断网络是

gridview中的单元格弹出一个窗口

网格中的单元格弹出一个窗口 $(document).ready(function(){ var s=$('#grdTest_Div'); var tr=$('#grdTest_Div').children().children().children().children(); var grid = document.all.grdTest; tr.each(function(i,j){ if(i!=0&&i!=tr.length) { $('td',j).eq(3).click(funct

android 中在activity弹出一个对话框,并不会执行onpause生命周期方法

在实际的应用开发中,我们可能会在onResume中进行网络交互,在网络交互的过程中免不了使用Progressdialog,那么现在问题来了,在我们弹出一个进度对话框的时候如果我们的activity的onpause生命方法得到执行,然后在数据加载完毕,对话框进行消失的时候,activity的onResume再次得到执行,然后再次请求网络,这样一个恶性循环就开始了,这样的错误实在是太严重了,当然了上面只是在我的想象之中,然后就用代码实验了下,在弹出一个对话框的时候我们activity的onpause

如何弹出一个窗口气泡(使用定时器向上移动)

原文链接:http://blog.csdn.net/tangaowen/article/details/5108980 如何弹出一个窗口气泡 最近在工作中遇到这样一个需求,就是需要将一个窗口从右下角任务栏下面缓缓的上升到任务栏的上面,现在有很多的软件都有这样的气泡,比如:搜狗输入法的词条更新窗口,还比如CSDN的广告窗口等等. 1.首先 将要弹出的窗口移动到任务栏(当前屏幕)以下 2.然后,获得任务栏(本质是个窗口)的高度,这样就可以知道窗口最终的位置了 3.然后,计算获得窗口最终停止的位置:计

JavaScript基础 window.prompt() 弹出一个输入框 设置提示信息与默认值

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut

如何弹出一个对话框

怎么实现弹出一个对话窗口: JOptionPane.showMassageDiglog(null,"弹出的对话"); 在弹出的对话窗口输入并接收: String +a(变量名)  =JOptionPane.showInputDialog(null,"请输入"); 将接收的字符串转化为整形: int s(变量名)=Integer.parseInt(a); 将接收的字符串转化为double: double p(变量名)=Double.parseDouble(a); 其中

转 android 从底部弹出一个popuwindow,渐入渐出效果。我这里是用在购物车需要选择购买选项的操作。

最近要改客户端,需要实现一个从底部弹出的popuwindow,像我这种渣渣android技术,能整出popuwindow但是整不出动画,百度之,记录一下. 从下面这个地址转的 http://blog.csdn.net/yxhuang2008/article/details/42617805 最近因为要用到PopupWindow,所以,就在网上搜索了一下,发现挺多关于这样的文章,现在我把它们整理了一下. 1.Android PopupWindow 的使用技巧,http://www.cnblogs.

从点击Button到弹出一个MessageBox, 背后发生了什么(每个UI线程都有一个ThreadInfo结构, 里面包含4个队列和一些标志位)

思考一个最简单的程序行为:我们的Dialog上有一个Button, 当用户用鼠标点击这个Button时, 我们弹出一个MessageBox. 这个看似简单的行为, 谁能说清楚它是如何运行起来的,背后究竟发生了什么? 下面是我个人尝试的解答: (1)我们的鼠标点击事件到达设备的驱动程序, 驱动程序把消息放入系统硬件输入队列SHIQ(system hardware input queue). (2)通过系统的原始输入线程 RIT (raw input thread)把鼠标事件发送到对应的窗口.这里我

CEF中禁止弹出浏览器窗口

使用CEF时,加载的网页,如果里面有链接,指定target="_blank",则会弹出一个新的浏览窗口.如果想禁掉,让新页面在当前浏览窗口中显示,可以在browser进程的handler里重写CefLifeSpanHandler的OnBeforePopup方法,用browser的mainFrame加载popup请求的url.代码如下: bool SimpleHandler::OnBeforePopup(CefRefPtr<CefBrowser> browser, CefRe