前言:先声明,项目源自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
}
}
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.youkuaiyun.com/detail/shi508181017/9136803