listView点击空间的时候弹出 PopupWindow

package cn.itcast.mobilesafe.ui;

import java.util.List;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager.LayoutParams;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import cn.itcast.mobilesafe.R;
import cn.itcast.mobilesafe.adapter.AppManagerAdapter;
import cn.itcast.mobilesafe.domain.AppInfo;
import cn.itcast.mobilesafe.engine.AppInfoProvider;

public class AppManagerActivity extends Activity{
	protected static final int GET_ALL_APP_FINISH = 80;
	private ListView lv_app_manager;
	private LinearLayout ll_loading;
	private AppInfoProvider provider;
	private List appinfos;
	private PopupWindow localPopupWindow ;
	private AppManagerAdapter appManagerAdapter;
	private Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			switch (msg.what) {
			case GET_ALL_APP_FINISH:
				ll_loading.setVisibility(View.INVISIBLE);//将linerlayout显示出来
				//把数据设置给listview的数据适配器
				appManagerAdapter = new AppManagerAdapter(appinfos,AppManagerActivity.this);
				lv_app_manager.setAdapter(appManagerAdapter);
				break;

			default:
				break;
			}
		};
	};
		
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.app_manager);
		lv_app_manager = (ListView) this.findViewById(R.id.lv_app_manager);
		ll_loading = (LinearLayout) this.findViewById(R.id.ll_app_manager_loading);
		
		ll_loading.setVisibility(View.VISIBLE);
		new Thread(){
			public void run() {
				provider = new AppInfoProvider(AppManagerActivity.this);
				appinfos = provider.getAllApps();
				//
				Message msg = new Message();
				msg.what = GET_ALL_APP_FINISH;
				handler.sendMessage(msg);
			};
		}.start();
		
		lv_app_manager.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView parent, View view, int position,
					long id) {
				//保证只有一个popupwindow的实例存在
				dismissPopUpWindow();
				
				//获取当前view对象在窗体中的位置
				int [] arrayofInt = new int[2];
				view.getLocationInWindow(arrayofInt);//其实就是获取view左上角的坐标
				
				int i = arrayofInt[0]+60;//x轴坐标 右移 60
				int j = arrayofInt[1];
				TextView tv = new TextView(AppManagerActivity.this);
				AppInfo info = (AppInfo) lv_app_manager.getItemAtPosition(position);
				String packname = info.getPackname();
				tv.setTextSize(25);
				tv.setTextColor(Color.RED);
				tv.setText(packname);
				
				localPopupWindow = new PopupWindow(tv,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
				Drawable background = new ColorDrawable(Color.GREEN);
				localPopupWindow.setBackgroundDrawable(background);
				localPopupWindow.showAtLocation(tv,Gravity.LEFT|Gravity.TOP, i,j);
			}

		});
		/**
		 * listView滚动的时候调用的方法
		 */
		lv_app_manager.setOnScrollListener(new OnScrollListener() {
			/**
			 * 滚动状态发生改变的时候 滚动到静止 静止到滚动
			 */
			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
				dismissPopUpWindow();
			}
			/**
			 * 滚动的时候(non-Javadoc)
			 */
			@Override
			public void onScroll(AbsListView view, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {
				dismissPopUpWindow();
			}
		});
	}
	private void dismissPopUpWindow() {
		if(localPopupWindow !=null){
			localPopupWindow.dismiss();
			localPopupWindow = null;
		}
	}
}

你可能感兴趣的:(Adroid)