一. 实现方法
1.列表中每项的布局文件
<?xml version= "1.0" encoding ="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width= "match_parent"
android:layout_height= "wrap_content"
android:background= "@color/white"
android:paddingTop= "10dip"
android:paddingBottom= "10dip">
<TextView
android:id="@+id/select_department_name"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:textSize="16dp"
android:gravity="center"
android:text="测试"
android:layout_alignParentLeft="true"
/>
<CheckBox
android:id="@+id/selectcheckbox"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
style= "@style/DeptCheckboxTheme"
android:layout_marginRight="18dp"
/>
</RelativeLayout>
2.通过控制列表项中的每项与边的距离,例如用树形展示部门层级关系,可以在模型数据对象Department中根据层级level属性来动态调整
适配器中的关键代码
@Override
public View getView( int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
final Department element = departments.get(position);
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout. select_department_item, null );
holder. checkBox = (CheckBox) convertView.findViewById(R.id.selectcheckbox );
holder. contentText = (TextView) convertView.findViewById(R.id.select_department_name );
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//根据层级属性动态调整边距
int level = element.getDepth();
if(level == 1){
holder. contentText.setPadding(
10,
holder. contentText.getPaddingTop(),
holder. contentText.getPaddingRight(),
holder. contentText.getPaddingBottom());
} else{
holder. contentText.setPadding(
indentionBase * (level),
holder. contentText.getPaddingTop(),
holder. contentText.getPaddingRight(),
holder. contentText.getPaddingBottom());
}
final CheckBox checkBox = holder.checkBox ;
checkBox.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
isSelected.put(element.getId(), isChecked);
}
});
holder. contentText.setText(element.getName());
Boolean checked = isSelected.get(element.getId());
holder. checkBox.setChecked(checked== null?false :checked);
// if (element.isHasChildren() && !element.isExpanded()) {
holder.disclosureImg.setImageResource(R.drawable.arrow_close);
//这里要主动设置一下icon可见,因为convertView有可能是重用了"设置了不可见"的view,下同。
holder.disclosureImg.setVisibility(View.VISIBLE);
// } else if (element.isHasChildren() && element.isExpanded()) {
holder.disclosureImg.setImageResource(R.drawable.arrow_open);
holder.disclosureImg.setVisibility(View.VISIBLE);
// } else if (!element.isHasChildren()) {
holder.disclosureImg.setImageResource(R.drawable.arrow_close);
holder.disclosureImg.setVisibility(View.INVISIBLE);
// }
return convertView;
}
----
spring mvc+tomcat源码分析视频(链接复制在浏览器打开)
https://study.163.com/course/courseMain.htm?share=2&shareId=480000001919582&courseId=1209399899&_trace_c_p_k2_=6d81bc445e9c462ab8d6345e40f6b0bf