1、定义ListViewDialog和xml文件
list_view.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="450dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/txt_cancel"
android:orientation="vertical">
<View
android:layout_width="fill_parent"
android:layout_height="2dp"
android:background="#cccccc" />
<ListView
android:id="@+id/lv_remain_item"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/txt_cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center"
android:text="cancel"
android:textSize="25sp" />
</LinearLayout>
</LinearLayout>
ListViewDialog
public class ListViewDialog extends Dialog {
private final Context mContext;
private ListView mListView;
private TextView tvCancle;
public ListViewDialog(Context context) {
super(context);
mContext = context;
initView();
}
private void initView() {
View contentView = View.inflate(mContext, R.layout.list_view, null);
mListView = (ListView) contentView.findViewById(R.id.lv_remain_item);
tvCancle=contentView.findViewById(R.id.txt_cancel);
setContentView(contentView);
}
public TextView getTvCancle() {
return tvCancle;
}
public void setTvCancle(TextView tvCancle) {
this.tvCancle = tvCancle;
}
public ListView getmListView() {
return mListView;
}
public void setmListView(ListView mListView) {
this.mListView = mListView;
}
}
2、设置适配器
public class ScaleUserAdapter extends BaseAdapter {
private Context context;
private List<String> list;
public ScaleUserAdapter(Context context) {
setContext(context);
}
@Override
public int getCount() {
return getList() == null ? 0 : getList().size();
}
@Override
public String getItem(int i) {
return getList() == null ? null : getList().get(i);
}
@Override
public long getItemId(int i) {
return i;
}
static class ViewHolder {
public TextView userNameTextView;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHolder viewHolder;
if (null == convertView) {
viewHolder = new ViewHolder();
convertView = View.inflate(getContext(), R.layout.setting_mydevice_hs5_delete_item, null);
viewHolder.userNameTextView = (TextView) convertView.findViewById(R.id.tv_shortcut_text);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if (null != list) {
viewHolder.userNameTextView.setText(list.get(position));
} else {
viewHolder.userNameTextView.setText("");
}
return convertView;
}
public Context getContext() {
return context;
}
public void setContext(Context context) {
this.context = context;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
}
适配器布局文件 setting_mydevice_hs5_delete_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal" >
<TextView
android:id="@+id/tv_shortcut_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="20dp"
android:gravity="left"
android:textColor="#ff000000"
android:textSize="20sp" />
</RelativeLayout>
3、设置适配器的高度,不设置可能会出现BUG
public class SetHeight {
public void setListViewHeightBasedOnChildren(ListView listView, BaseAdapter adapter) {
if (adapter==null){
return;
}
int totalHeight = 0;
for (int i = 0; i < adapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目
View listItem = adapter.getView(i, null, listView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (adapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
}
4、调试Dialog嵌套ListView
public class MainActivity extends AppCompatActivity {
private ScaleUserAdapter scaleUserAdapter;
private SetHeight SetHeight;
private List<String> reslist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SetHeight =new SetHeight();
scaleUserAdapter = new ScaleUserAdapter(MainActivity.this);
reslist = new ArrayList<>();
// 初始化控件属性 设置参数 绑定事件
final ListViewDialog userListDialog = new ListViewDialog(MainActivity.this);
userListDialog.setCancelable(true);
userListDialog.setTitle("识别结果");
userListDialog.getTvCancle().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
userListDialog.dismiss();
}
});
scaleUserAdapter.setList(reslist);
userListDialog.getmListView().setAdapter(scaleUserAdapter);
SetHeight.setListViewHeightBasedOnChildren(userListDialog.getmListView(),scaleUserAdapter);
userListDialog.getmListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("mouse",position+"");
}
});
userListDialog.show();
}
}