Android自定义popuwindow嵌套listview

前言:先声明,项目源自csdn上,其他网站扒过去的请在csdn上搜索“Android自定义popuwindow嵌套listview”标题,下载也是一样!如果在其他网站上找到该篇文章来问我哪里可以下载的,你先做好被叼的准备,因为只有csdn上有!


一、自定义类

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.PopupWindow.OnDismissListener;
import android.widget.TextView;
/**
 * 自定义popuwindow
 * @author Alan <br/>
 * 2015-9-24 <br/>
 * 508181017@qq.com
 */
public class CustomListPopupWindow extends PopupWindow implements OnDismissListener{
	
	private ListView mListView;
	private List<UserModel> mUserModels=new ArrayList<UserModel>();
	private ItemClickCallBack mItemCallBack;
	private Context mContext;
	private int checkedUId=-1;
	private View rootView;
	private DataAdapter mAdapter=null;
	
	/**
	 * 
	 * @param context
	 * @param mUserModels 数据集
	 * @param checkedUId 被选中的item
	 * @param mItemCallBack item的点击事件
	 */
	public CustomListPopupWindow(Context context,List<UserModel> mUserModels,int checkedUId,ItemClickCallBack mItemCallBack){
		super();
		this.mContext=context;
		this.mUserModels=mUserModels;
		this.checkedUId=checkedUId;
		this.mItemCallBack=mItemCallBack;
		initPop();
	}
	
	
	
	private void initPop() {
		// TODO Auto-generated method stub
		rootView = LayoutInflater.from(mContext).inflate(R.layout.list_popupwindow, null);
		mListView=(ListView) rootView.findViewById(R.id.lv_pop_datas);
		this.setContentView(rootView);
        this.setWidth(LayoutParams.FILL_PARENT);
        this.setHeight(LayoutParams.FILL_PARENT);
        this.setFocusable(true);
        this.setOnDismissListener(this);
        this.setBackgroundDrawable(new BitmapDrawable());
        //this.setAnimationStyle(animStyle);
        this.setContentView(rootView);
        this.mAdapter=new DataAdapter();
        this.mListView.setAdapter(mAdapter);
        this.mListView.setOnItemClickListener(new OnItemClickListener() {
        	 
            @Override
            public void onItemClick(AdapterView parent, View view,
                    int position, long id) {
                if (mItemCallBack != null) {
                	UserModel user=mUserModels.get(position);
                	mItemCallBack.callBack(user);
                }
            }
        });
	}



	private class DataAdapter extends BaseAdapter {
		
        class ViewHolder {
            TextView tv_ischecked;
            TextView tv_name;
            ImageView iv_ischecked;
            ImageView iv_head;
        }
        
        
        
        @Override
        public int getCount() {
            if (mUserModels != null) {
                return mUserModels.size();
            }
            return 0;
        }
 
        @Override
        public Object getItem(int position) {
            if (mUserModels != null) {
                return mUserModels.get(position);
            }
            return null;
        }
 
        @Override
        public long getItemId(int position) {
            return position;
        }
 
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;
            UserModel uModel=mUserModels.get(position);
            if (convertView == null) {
                viewHolder = new ViewHolder();
                convertView = LayoutInflater.from(mContext).inflate(R.layout.block_poplistview_item, null);
                
                viewHolder.tv_ischecked= (TextView) convertView.findViewById(R.id.tv_ischecked);
                viewHolder.tv_name= (TextView) convertView.findViewById(R.id.tv_name);
                viewHolder.iv_ischecked= (ImageView) convertView.findViewById(R.id.iv_ischecked);
                viewHolder.iv_head= (ImageView) convertView.findViewById(R.id.iv_head);
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            //绑定数据
            viewHolder.tv_ischecked= (TextView) convertView.findViewById(R.id.tv_ischecked);
            viewHolder.tv_name.setText(uModel.getuName());
            viewHolder.iv_ischecked= (ImageView) convertView.findViewById(R.id.iv_ischecked);
            if (checkedUId==uModel.getuId()) {
            	viewHolder.tv_ischecked.setVisibility(View.VISIBLE);
            	viewHolder.iv_ischecked.setVisibility(View.VISIBLE);
			}else{
				viewHolder.tv_ischecked.setVisibility(View.GONE);
            	viewHolder.iv_ischecked.setVisibility(View.GONE);
			}
            
            return convertView;
        }
    }
 
    public interface ItemClickCallBack {
        void callBack(UserModel userModel);
    }
 
   
 
   
 
    private int dp2Px(Context context, float dp) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dp * scale + 0.5f);
    }

	@Override
	public void onDismiss() {
		// TODO Auto-generated method stub
		
	}

}


二、布局main.xml,item.xml,popupwindow.xml

1、main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="自定义popuwindow" />

</LinearLayout>
2、block_poplistview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_margin="10dp"
    android:gravity="center" >

    <ImageView
        android:id="@+id/iv_head"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/mainpage_group_icon_cartoon" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_gravity="center"
        android:layout_marginLeft="10dp"
        android:layout_weight="1"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/tv_ischecked"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:text="当前机器人"
            android:visibility="gone"
            android:textColor="#ff0000" />

        <TextView
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:text="张三" />
    </LinearLayout>

    <ImageView
        android:id="@+id/iv_ischecked"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:src="@drawable/icon_poplist_item_checked" />

</LinearLayout>

3、list_popupwindow.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/bg_transparent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <ListView
        android:id="@+id/lv_pop_datas"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:background="@android:color/white" />

</LinearLayout>

三、实体类

UserModel.class

/**
 * 用户实体类
 * @author Alan <br/>
 * 2015-9-24 <br/>
 * 508181017@qq.com
 */
public class UserModel {
	
	private int uId; //用户id
	private String uName; //用户名
	private String headImg; //用户头像
	
	
	public int getuId() {
		return uId;
	}
	public void setuId(int uId) {
		this.uId = uId;
	}
	public String getuName() {
		return uName;
	}
	public void setuName(String uName) {
		this.uName = uName;
	}
	public String getHeadImg() {
		return headImg;
	}
	public void setHeadImg(String headImg) {
		this.headImg = headImg;
	}
	

}
四、调用

MainActivity.class

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.hhb.popupwindow.CustomListPopupWindow.ItemClickCallBack;

public class MainActivity extends Activity implements ItemClickCallBack{
	
	private Button myButton;
	private List<UserModel> mUserModels=new ArrayList<UserModel>();
	CustomListPopupWindow mPopupWindow;
	private ItemClickCallBack mCallBack;
	private int mCheckedUId=3;
	private Context mContext;
	
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		myButton = (Button) findViewById(R.id.button);
		mCallBack=this;
		mContext=this;
		initData();
		//监听按钮
		myButton.setOnClickListener(new Button.OnClickListener() {
			@Override
			public void onClick(View arg0) {
				mPopupWindow=new CustomListPopupWindow(mContext, mUserModels,mCheckedUId, mCallBack);
				mPopupWindow.showAsDropDown(myButton);
			}
		});
		
	}
	
	void initData(){
		UserModel user=null;
		
		user=new UserModel();
		user.setuId(1);
		user.setuName("张三");
		mUserModels.add(user);
		
		user=new UserModel();
		user.setuId(2);
		user.setuName("张2");
		mUserModels.add(user);

		user=new UserModel();
		user.setuId(3);
		user.setuName("张3");
		mUserModels.add(user);

		user=new UserModel();
		user.setuId(4);
		user.setuName("张4");
		mUserModels.add(user);

		user=new UserModel();
		user.setuId(5);
		user.setuName("张5");
		mUserModels.add(user);

		user=new UserModel();
		user.setuId(6);
		user.setuName("张6");
		mUserModels.add(user);

		user=new UserModel();
		user.setuId(7);
		user.setuName("张7");
		mUserModels.add(user);

		user=new UserModel();
		user.setuId(8);
		user.setuName("张8");
		mUserModels.add(user);
		
		
	}

	@Override
	public void callBack(UserModel userModel) {
		// TODO Auto-generated method stub
		mCheckedUId=userModel.getuId();
		mPopupWindow.dismiss();
	}
	
}
五、下载地址:http://download.csdn.net/detail/shi508181017/9136803

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值