在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="https://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>}

                
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值